繁体   English   中英

groupby上的熊猫cumsum行为异常

[英]Pandas cumsum on groupby not behaving as expected

我有一个这样的数据框:

df = pd.DataFrame({'prob':np.random.uniform(0,1,size), 'target':np.random.randint(0,2, size=size), 
              'pred':np.random.randint(0,2, size=size)})

我想计算cumsum一个的groupby一个的qcut

df['box'] = pd.qcut(df['prob'], 10)

我的期望是按顺序计算每个组的累积函数,但是要计算每个元素的总和:

df['target_1'] = 1- df['target']
ch_curve = df.groupby('box').target.cumsum()/float(df.target.sum())
nch_curve = df.groupby('box').target_1.cumsum()/float(df.target_1.sum())

与答案

0     0.000000
1     0.018182
2     0.018182
3     0.018182
4     0.000000
5     0.018182
6     0.018182
7     0.018182
8     0.036364
9     0.018182
10    0.000000
11    0.018182
12    0.018182
13    0.036364
14    0.000000
15    0.036364
16    0.036364
17    0.036364
18    0.054545
19    0.000000
20    0.000000
21    0.018182
22    0.018182
23    0.05454

代替

'(0.0, 0.1)'    0.04
'(0.1, 0.2)'    0.12 #(0.08 + previous 0.04 )
'(0.2, 0.3)'    0.17 #(0.05 + previous 0.12 )

您要计算每个组的百分比, 然后求和。

在原始代码中, df.groupby('box').target.cumsum()将占用每个组的cumsum -因此,对于分组后的DataFrame中的每个元素,您将都有一个元素。 然后,将在所有这些元素之间广播该划分。

相反,您希望为每个组获取一个摘要统计量,然后对这些统计量cumsum

ch_curve = (df.groupby('box').target.sum() / df.target.sum()).cumsum()
nch_curve = (df.groupby('box').target_1.sum() / df.target_1.sum()).cumsum()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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