我正在尝试创建一个列,该列是Pandas中的条件累积总和。我知道如何在Excel中轻松地做到这一点,但我确实在努力找出如何在Pandas中实现这一目标。考虑以下数据框
df:
Year Income
0 2001 17
1 2001 4
1 2001 9
2 2002 6
2 2002 1
2 2002 1
3 2003 12
3 2003 11
3 2003 5
我想向数据框添加一个新列。新列应包含以下所有收入的总和:
因此输出如下所示:
df:
Year Income Cum_Income
0 2001 17 13 # 2 values less than 17 in 2001: 4 + 9 = 13
1 2001 4 0 # no values less than 4 in 2001: 0
1 2001 9 4 # 1 value less than 9 in 2001 : 4
2 2002 6 2 # etc.
2 2002 1 0
2 2002 1 0
3 2003 12 16
3 2003 11 5
3 2003 5 0
我能想到的唯一方法是遍历每一行并分别计算Cum_income中的每个单元格,但我希望有一种更干净的方法。任何建议将非常有帮助。
numpy
广播中的一些魔术
s1 = df.Year.values
s2 = df.Income.values
np.sum((s1==s1[:,None])*((s2<s2[:,None])*s2), axis=1)
Out[246]: array([13, 0, 4, 2, 0, 0, 16, 5, 0], dtype=int64)
#df['New'] = np.sum((s1==s1[:,None])*((s2<s2[:,None])*s2), axis=1)
说明
(s1==s1[:,None])
匹配年份,如果年份不相同,我们不检查值,在您的情况下,它将返回False,value * False将为0
(s2<s2[:,None])*s2
检查当前行的值是否具有大于它的值,如果返回True,则将True乘以该行值将是该值,以供将来累加。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句