我想合并特定列(key1,key2)上的两个数据帧,并总结另一列(值)的值.
>>> 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']]
两种方法都给出了我想要的结果,但我想知道是否有更简单的方法.
解决方法:
我不知道更简单,但你可以更简洁:
>>> 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).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。