繁体   English   中英

计算熊猫数据帧之和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM