首页 > 解决方案 > 将系列值插入到值为空的单独熊猫列中

问题描述

我有两个dfs:

df1 = pd.DataFrame({'name':['foo','Bar','Foo','jim','john','mary','jim'],
                   'code1':[np.nan,np.nan,'432',np.nan,np.nan,np.nan,'563']})

df1

    name    code1
0   foo     NaN
1   Bar     NaN
2   Foo     432
3   jim     NaN
4   john    NaN
5   mary    NaN
6   jim     563


df2 = pd.DataFrame({'xyz':['this','column','doesnt','matter'],
                   'code2':['123','345','456','234']})

df2

    xyz      code2
0   this     123
1   column   345
2   doesnt  456
3   matter   234

code1df1 的列中存在缺失值。我真的不需要任何匹配,我只是想在此列中添加一些额外的代码。

所以我有df2,有一code2列。我想获取这四个代码,并将它们添加到 df1 中的四个单元格中。

我的预期输出是这样的:

df3

    name    code
0   foo     123 # new code
1   Bar     345 # new code
2   Foo     432 # code unchanged
3   jim     456 # new code 
4   john    234 # new code
5   mary    NaN # not important
6   jim     563 # code unchanged

到目前为止我尝试了什么?

我已经保存了 df2 的代码

codes = df2['code2']

codes

0    123
1    345
2    456
3    234
Name: code, dtype: object

然后我过滤 df1 以仅具有空代码,因为我不想替换存在的代码,并且由于我只有四个新代码要插入,所以我得到了 df1 的前四行并将新代码分配给它们:

mask = df1['code1'].isnull()

df1['code1'][mask][:4] = codes

但是df1什么也没发生。还是有南斯。

我尝试了其他一些方法,获取了值,但也没有奏效:

df1['code1'][mask][:4].values = codes.values

然后我的想法就用完了。不工作

df1['code1'][mask][list(range(4))] = codes.values

标签: pythonpandas

解决方案


IIUC

s = df1.loc[df1.code1.isnull(),'code1']
# Filter the df1 first...
s.iloc[:len(df2)] = df2.code2.values
# Assign value to NaNs, regardless of index...
df1.loc[df1.code1.isnull(), 'code1'] = s

# Assign the result back 
df1
   name code1
0   foo   123
1   Bar   345
2   Foo   432
3   jim   456
4  john   234
5  mary   NaN
6   jim   563

推荐阅读