在 Pandas 数据框中,如何获取连续出现零值的列的索引?

3

I have a pandas dataframe like below in Python


       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

有人可以帮我吗?

2个回答

5
你可以使用 df.shiftaxis=1 上进行操作,然后使用 df.where 检查条件并与 any 结合使用。
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  

3

您可以尝试使用 shiftidxmax

s = df.iloc[:,1:].eq(0)
s = (s + s.shift(-1, fill_value=0,axis=1)) == 2

df['first_month'] = np.where(s.any(1), s.idxmax(1), '-')

输出(仅限 np.where 部分):

array(['2020-04', '-', '2021-02', '2020-05'], dtype=object)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接