我有两个dataframes,我试图比较两个列(Cat1和Cat2),当Cat1和Cat2相同时,我希望对Prc列中的值求和。 在下面的例子中,唯一满足条件的两行是df[0]的第0行和第4行,它们满足df[1]的第1行和第4行,因此在这种情况下df[0]的和是200 df[1]的和是185。 df[0]
Cat1 Cat2 Cat3 Prc
0 11 0 5 100
1 22 2 9 150
2 33 1 8 50
3 44 2 6 200
4 55 1 8 100
df[1]
Cat1 Cat2 Cat3 Prc
0 66 1 6 120
1 11 0 5 90
2 44 1 6 185
3 77 2 7 145
4 55 1 5 95
如何同时比较不同数据流中的两个列? 这些都是大的dataframes,每行有500,000行,每列有32列,因此我希望避免创建新的dataframes或新列。
一个方法是使用DataFrame.merge:
df1 = df[0].merge(df[1], on=['Cat1','Cat2'], suffixes=('_0','_1'))
print (df1)
Cat1 Cat2 Cat3_0 Prc_0 Cat3_1 Prc_1
0 11 0 5 100 5 90
1 55 1 8 100 5 95
print (df1.filter(like='Prc').sum())
Prc_0 200
Prc_1 185
dtype: int64
另一种方法是:
s1 = df[0].set_index(['Cat1','Cat2'])['Prc']
s2 = df[1].set_index(['Cat1','Cat2'])['Prc']
print (s1[s1.index.isin(s2.index)].sum())
200
print (s2[s2.index.isin(s1.index)].sum())
185
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。