熊猫根据连续类别设置开始和结束

时间:2018-11-19 00:59:06

标签: python pandas

因此,在堆栈溢出上也有类似的问题,但是没有一个能很好地解决这个问题,我真的无法弄清楚这个问题。我有一个看起来像这样的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已在“帐户”上排序。

我们非常感谢您的帮助。谢谢。

2 个答案:

答案 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']

如果由于某种原因不好,请继续学习熊猫。谢谢。