python - 将系列值插入到值为空的单独熊猫列中
问题描述
我有两个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
code1
df1 的列中存在缺失值。我真的不需要任何匹配,我只是想在此列中添加一些额外的代码。
所以我有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
解决方案
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
推荐阅读
- cmake - CMake子目录包含问题
- ios - 如何将 xib (UITableViewCell) 注册到 UITableViewController
- flutter - 任务 ':app:compileDebugKotlin' 执行失败。飘飘然
- java - 如何使用邮递员发送文件和对象?
- arrays - C 编程:使用字符指针打印以空字符结尾的字符串
- javascript - ReactJS es-lint:返回语句不应包含赋值
- sed - sed - 将输入大小写更改为 ALLCAPS_Camel (SCOTT_Dummy)
- etl - 如何更改 tRestClient 的查询参数值
- javascript - TypeError:c.match 不是函数
- jquery - 集成在 GrapesJS 编辑器中的内联 CKeditor