因此,在堆栈溢出上也有类似的问题,但是没有一个能很好地解决这个问题,我真的无法弄清楚这个问题。我有一个看起来像这样的pandas DataFrame:
Account Size
------------------
11120011 0
11130212 0
21023123 1
22109832 2
28891902 2
33390909 0
34123495 0
34490909 0
对于所有size == 0的帐户,我想像这样折叠它们:
Account Start Size Account End
---------------------------------------
11120011 0 11130212
21023123 1 21023123
22109832 2 22109832
28891902 2 28891902
33390909 0 34490909
size!= 0的帐户只能在两列中重复,但是对于size = 0的帐户,我只想保留该特定段的开头和结尾。 df已在“帐户”上排序。
我们非常感谢您的帮助。谢谢。
答案 0 :(得分:1)
IIUC,使用diff
+ cumsum
创建组密钥,然后执行agg
m1=df.Size.diff().ne(0)
m2=df.Size.ne(0)
df.groupby((m1|m2).cumsum()).agg({'Account':['first','last'],'Size':'first'})
Out[97]:
Size Account
first first last
Size
1 0 11120011 11130212
2 1 21023123 21023123
3 2 22109832 22109832
4 2 28891902 28891902
5 0 33390909 34490909
答案 1 :(得分:0)
迟到聚会了,但我认为这也可行。
df['Account End'] = df.shift(-1)[(df.Size == 0)]['Account']
如果由于某种原因不好,请继续学习熊猫。谢谢。