类似于该主题:Add default values while merging tables in pandas
该主题的答案填充了结果DataFrame中的所有NaN
,这不是我想要的。
让我们想象以下情况:我有两个数据帧df1
和df2
。每个DataFrame可能包含一些Nan
,df1
的列是'a'
和col1
,df2
的列是'a'
和{ {1}}其中col1和col2是列名称的不交集列表(例如df1和df2可以分别将col2
和'a', 'b', 'c'
作为列名称)。我想在'a', 'd', 'e'
和df1
上执行左合并,并填充该合并的所有缺失值(df2
的任何行都填充列df1
的值,即而不是df2)中列'a'
的值(带有默认值)。我们可以想象我有一个'a'
字典,它将default_values
的任何元素都匹配到默认值。
给你一个具体的例子:
col2
预期输出:
df1
a b c
0 0 0.038108 0.961687
1 1 0.107457 0.616689
2 2 0.661485 0.240353
3 3 0.457169 0.560912
4 5 5.000000 5.000000
df2
a d e
0 0 0.405170 0.934776
1 1 0.684532 0.168738
2 2 0.729693 0.967310
3 3 0.844770 NaN
4 4 0.842673 0.941324
default_values = {'d':42, 'e':43}
答案 0 :(得分:2)
在撰写此问题时,我找到了一个可行的解决方案。我仍然认为这是一个有趣的问题。这是获得预期输出的解决方案:
a b c d e
0 0 0.038108 0.961687 0.405170 0.934776
1 1 0.107457 0.616689 0.684532 0.168738
2 2 0.661485 0.240353 0.729693 0.967310
3 3 0.457169 0.560912 0.844770 NaN
4 5 5.000000 5.000000 42 43
此解决方案适用于左/右合并,并且可以扩展为适用于外部合并(也通过完成第一个数据框)。
Edit:在我的合并中未指定df3 = pd.DataFrame(default_values,
index = df1.set_index('a').index.difference(df2.a))
df3['a'] = df3.index
df1.merge(pd.concat((df2, df3), sort=False))
参数,因为与我合并的DataFrame的构造使df1中的列'a'的所有值都位于其自己的列'a'中。我们可以在此合并调用中添加一个how='left'
,它会提供相同的输出。