我想合并特定列(键1,键2)上的两个数据框,并汇总另一列(值)的值。>>> df1 = pd.DataFrame({'key1': range(4), 'key2': range(4), 'value': range(4)}) key1 key2 value0 0 0 01 1 1 12 2 2 23 3 3 3>>> df2 = pd.DataFrame({'key1': range(2, 6), 'key2': range(2, 6), 'noise': range(2, 6), 'value': range(10, 14)}) key1 key2 noise value0 2 2 2 101 3 3 3 112 4 4 4 123 5 5 5 13我想要这个结果: key1 key2 value0 0 0 01 1 1 12 2 2 123 3 3 144 4 4 125 5 5 13用SQL术语,我想要:SELECT df1.key1, df1.key2, df1.value + df2.value AS valueFROM df1 OUTER JOIN df2 ON key1, key2我尝试了两种方法:方法1concatenated = pd.concat([df1, df2])grouped = concatenated.groupby(['key1', 'key2'], as_index=False)summed = grouped.agg(np.sum)result = summed[['key1', 'key2', 'value']]方法2joined = pd.merge(df1, df2, how='outer', on=['key1', 'key2'], suffixes=['_1', '_2'])joined = joined.fillna(0.0)joined['value'] = joined['value_1'] + joined['value_2']result = joined[['key1', 'key2', 'value']]两种方法都能得到我想要的结果,但是我想知道是否有更简单的方法。
1 回答

浮云间
TA贡献1829条经验 获得超4个赞
我不知道更简单,但是您可以得到更多的简洁:
>>> pd.concat([df1, df2]).groupby(["key1", "key2"], as_index=False)["value"].sum()
key1 key2 value
0 0 0 0
1 1 1 1
2 2 2 12
3 3 3 14
4 4 4 12
5 5 5 13
但是,根据您对链接操作的容忍度,您可能还是希望将其分成多行(四个趋向于接近我的上限,在本例中为concat-groupby-select-sum)。
添加回答
举报
0/150
提交
取消