添加默认值以在熊猫中合并

时间:2019-03-04 12:40:01

标签: python pandas dataframe

类似于该主题:Add default values while merging tables in pandas

该主题的答案填充了结果DataFrame中的所有NaN,这不是我想要的。

让我们想象以下情况:我有两个数据帧df1df2。每个DataFrame可能包含一些Nandf1的列是'a'col1df2的列是'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}

1 个答案:

答案 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',它会提供相同的输出。