在下面的数据框中,我想创建一个新列C
,它将是A
列中每个组的B
的累积和,但是这些和必须从零开始,并且只在该组的倒数第二个条目之前添加值
A B
0 1 5
1 1 6
2 2 3
3 2 4
4 2 5
5 3 2
5 3 7
6 4 3
因此,我的结果应该是:
A B C
0 1 5 0
1 1 6 5
2 2 3 0
3 2 4 3
4 2 5 7
5 3 2 0
5 3 7 2
6 4 3 0
(我认为这个问题很明显,但不知何故,我自己也弄不明白,也看不到任何地方已经问过了。)
Tags:
另一种选择是使用^{} 两次,如下所示:
在} 值,这样对于每组} 到
A
下取B
的^{A
,将重置B
的第一个条目,并在以后的^{0
期间变为NaN
在} ,以获得所需的输出:
A
的局部序列中,进一步按A
分组^{此解决方案是矢量化的,并且支持非连续组
结果:
编辑
如果您要按多个列分组,并且得到“KeyError”,请检查您的语法输入是否正确,例如:
如果按2列
year
和income
分组,则可以使用:Pandas支持使用或不使用
df
将参数传递给.groupby()
的语法。但是,对于被分组的实体本身不是df
的任何groupby()
,我们可能无法使用缩写形式仅引用列标签,例如'year'
,我们需要使用完整的列名,例如df['year']
尝试:
印刷品:
如果您的组已经是连续的,您可以
shift
并使用where
到NaN
跨组的行。移位还确保累计和与前几行相关,并且统计值为0,这是您想要的。然后使用内置的groupby
+cumsum
来避免较慢的lambda
如果分组行不是连续的,我们也可以处理这个问题。唯一的小修改是,我们需要基于分组列进行稳定排序(这样组内的顺序被保留,并且
cumsum
是正确的),然后最后我们可以对索引进行排序,以返回到数据帧的原始顺序,如果这很重要的话相关问题 更多 >
编程相关推荐