在Pandas中合并2个数据框:在某些列上合并,在其他列上汇总

我想合并特定列(键1,键2)上的两个数据框,并汇总另一列(值)的值。


>>> df1 = pd.DataFrame({'key1': range(4), 'key2': range(4), 'value': range(4)})

   key1  key2  value

0     0     0      0

1     1     1      1

2     2     2      2

3     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  value

0     2     2      2     10

1     3     3      3     11

2     4     4      4     12

3     5     5      5     13

我想要这个结果:


   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

用SQL术语,我想要:


SELECT df1.key1, df1.key2, df1.value + df2.value AS value

FROM df1 OUTER JOIN df2 ON key1, key2

我尝试了两种方法:


方法1


concatenated = pd.concat([df1, df2])

grouped = concatenated.groupby(['key1', 'key2'], as_index=False)

summed = grouped.agg(np.sum)

result = summed[['key1', 'key2', 'value']]

方法2


joined = 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']]

两种方法都能得到我想要的结果,但是我想知道是否有更简单的方法。


隔江千里
浏览 194回答 1
1回答

浮云间

我不知道更简单,但是您可以得到更多的简洁:>>> pd.concat([df1, df2]).groupby(["key1", "key2"], as_index=False)["value"].sum()   key1  key2  value0     0     0      01     1     1      12     2     2     123     3     3     144     4     4     125     5     5     13但是,根据您对链接操作的容忍度,您可能还是希望将其分成多行(四个趋向于接近我的上限,在本例中为concat-groupby-select-sum)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python