获取pandasdf中连续值为零的列的索引
我在 Python 中有一个如下所示的 Pandas 数据框
user_id 2020-03 2020-04 2020-05 2020-06 2020-07 2020-08 2020-09 2020-10 2020-11 2020-12 2021-01 2021-02 2021-03
0 5 20.0 0 0 38.0 45.0 54.0 83.0 107.0 129.0 146.0 174.0 136.0 33.0
1 7 5.0 13.0 26.0 27.0 19.0 13.0 7.0 14.0 21.0 17.0 13.0 5.0 5.0
2 14 0.0 7.0 25.0 22.0 60.0 13.0 1.0 25.0 49.0 16.0 6.0 0.0 0.0
3 16 0.0 2.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
我想知道第一个月(列)有两个连续列的值为 0。例如:
user_id 2020-03 2020-04 2020-05 2020-06 2020-07 2020-08 2020-09 2020-10 2020-11 2020-12 2021-01 2021-02 2021-03 first_month
0 5 20.0 0 0 38.0 45.0 54.0 83.0 107.0 129.0 146.0 174.0 136.0 33.0 2020-04
1 7 5.0 13.0 26.0 27.0 19.0 13.0 7.0 14.0 21.0 17.0 13.0 5.0 5.0 -
2 14 0.0 7.0 25.0 22.0 60.0 13.0 1.0 25.0 49.0 16.0 6.0 0.0 0.0 2021-02
3 16 0.0 2.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2020-05
谁能帮我?
回答
您可以使用df.shift
on执行此操作axis=1
,然后any
使用条件检查df.where
u = df.drop('user_id',1)
c = (u.eq(0)&u.shift(-1,axis=1).eq(0))
df['first_month'] = c.idxmax(1).where(c.any(1)) #c.idxmax(1).where(c.any(1),'-')
print(df)
user_id 2020-03 2020-04 2020-05 2020-06 2020-07 2020-08 2020-09
0 5 20.0 0.0 0.0 38.0 45.0 54.0 83.0
1 7 5.0 13.0 26.0 27.0 19.0 13.0 7.0
2 14 0.0 7.0 25.0 22.0 60.0 13.0 1.0
3 16 0.0 2.0 0.0 0.0 0.0 0.0 0.0
2020-10 2020-11 2020-12 2021-01 2021-02 2021-03 first_month
0 107.0 129.0 146.0 174.0 136.0 33.0 2020-04
1 14.0 21.0 17.0 13.0 5.0 5.0 NaN
2 25.0 49.0 16.0 6.0 0.0 0.0 2021-02
3 0.0 0.0 0.0 0.0 0.0 0.0 2020-05