在大Pandas中按组获取事件的连续发生次数

2024-04-29 17:12:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的数据帧有idwagedate,如下所示:

id   wage   date
1    100    201212
1    100    201301             
1     0     201302
1     0     201303
1    120    201304
1     0     201305
      .
2     0     201302
2     0     201303

我想创建一个n_months_no_income列来计算一个给定的个体已经连续数月wage==0,如下所示:

id   wage   date     n_months_no_income
1    100    201212             0
1    100    201301             0
1     0     201302             1
1     0     201303             2
1    120    201304             0
1     0     201305             1
      .                        .
2     0     201302             1
2     0     201303             2

我觉得这是groupby('id')cumcount(),也许diff()apply()fillna(0)之间的某种混合,但我没有找到合适的。你知道吗

你有什么想法吗?你知道吗

下面是一个数据帧示例,以便于复制:

df = pd.DataFrame({'id':[1,1,1,1,1,1,2,2],'wage':[100,100,0,0,120,0,0,0],
 'date':[201212,201301,201302,201303,201304,201305,201302,201303]})

编辑:添加代码以便于使用。你知道吗


Tags: 数据noid示例dfdatediffapply
1条回答
网友
1楼 · 发布于 2024-04-29 17:12:30

在本例中,使用cumcount创建两个groupby,并使用cumsum创建附加键

df.groupby('id').wage.apply(lambda x : x.groupby(x.ne(0).cumsum()).cumcount())
Out[333]: 
0    0
1    0
2    1
3    2
4    0
5    1
Name: wage, dtype: int64

相关问题 更多 >