[英]computing sum of pandas dataframes
我有两个要按二进制添加的数据框。 也就是说,给定
dfc1 = pd.DataFrame(list(zip(range(10),np.zeros(10))), columns=['bin', 'count'])
dfc2 = pd.DataFrame(list(zip(range(0,10,2), np.ones(5))), columns=['bin', 'count'])
这给了我
dfc1:
bin count
0 0 0
1 1 0
2 2 0
3 3 0
4 4 0
5 5 0
6 6 0
7 7 0
8 8 0
9 9 0
dfc2:
bin count
0 0 1
1 2 1
2 4 1
3 6 1
4 8 1
我想生成这个:
bin count
0 0 1
1 1 0
2 2 1
3 3 0
4 4 1
5 5 0
6 6 1
7 7 0
8 8 1
9 9 0
我在bin列匹配的地方添加了count列。
实际上,事实证明我只加1(即dfc2中的count始终为1)。 因此,该问题的另一个版本是“给定bin值数组(dfc2.bin),我如何在dfc1中将其每个对应的计数值加一个?”
到目前为止,我唯一的解决方案感觉非常低效(最终一点也不可读),在两个bin列之间进行了外部连接,从而创建了我要进行计算的第三个数据框,然后投射出不需要的列。
建议?
首先将bin
设置为两个数据帧中的索引,然后可以使用add
,需要fillvalue来指出如果数据帧中缺少bin则应使用零:
dfc1 = dfc1.set_index('bin')
dfc2 = dfc2.set_index('bin')
result = pd.DataFrame.add(dfc1, dfc2, fill_value=0)
熊猫自动对具有相等索引的行求和。
顺便说一句,如果您需要频繁执行此类操作,我强烈建议您使用numpy.bincount ,它甚至允许在一个数据帧内重复bin索引
由于dfc1索引与您的“ bin”值相同,因此您可以简单地执行以下操作:
dfc1.iloc[dfc2.bin].cnt += 1
请注意,由于count是内置的熊猫,因此我将“ count”列重命名为“ cnt”,这可能会引起混乱和错误!
作为combineAdd
答案的替代方法,您可以使用combineAdd
方法简单地同时将2个数据帧和set_index
一起添加,前提是它们的索引将与bin匹配:
dfc1.set_index('bin').combineAdd(dfc2.set_index('bin')).reset_index()
bin count
0 0 1
1 1 0
2 2 1
3 3 0
4 4 1
5 5 0
6 6 1
7 7 0
8 8 1
9 9 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.