gpt4 book ai didi

python - 在 Pandas DataFrame 中逐行标记将列从 0 更改为值

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:39 26 4
gpt4 key购买 nike

在这个例子中,我有一个包含两列 primeprime2 的数据集,我想逐行检查样式的变化:

>>> df = pd.DataFrame({'id_police':['p123','p123','p123','b123','b123'],
'date':['24/01/2017','24/11/2017','25/02/2018','24/02/2018','24/03/2018'],
'prime':[0,0,10,20,30],
'prime2':[0,30,10,20,0],
})
###
id_police date prime prime2
0 p123 24/01/2017 0 0
1 p123 24/11/2017 0 30
2 p123 25/02/2018 10 10
3 b123 24/02/2018 20 20
4 b123 24/03/2018 30 0

这是预期的结果(如果有两列发生变化,flag不为0,将它们添加到changedwhere中,还有像prime & prime2这样的10列):

  id_police        date  prime  prime2  changed  changedwhere(optional)
0 p123 24/01/2017 0 0<- 0 nan
1 p123 24/11/2017 0<- 30<- 1 prime2
2 p123 25/02/2018 10<- 10 1 prime
3 b123 24/02/2018 20 20 0 nan
4 b123 24/03/2018 30 0 0 nan

我试过但它在所有列中都显示:

df.diff()

在此先感谢您的帮助,如果有任何问题,请随时发表评论。

最佳答案

我们可以在 axis=1 上使用 Series.eq 并将其与 .shift 结合来检查前一行,如下所示:

df['changed'] = (df[['prime', 'prime2']].shift().eq(0).any(axis=1) & df[['prime', 'prime2']].ne(0).any(axis=1)).astype(int)

print(df)
id_police date prime prime2 changed
0 p123 24/01/2017 0 0 0
1 p123 24/11/2017 0 30 1
2 p123 25/02/2018 10 10 1
3 b123 24/02/2018 20 20 0
4 b123 24/03/2018 30 0 0

注意,如果你有 10 列,这会更困难,但对于你的例子,这就足够了

关于python - 在 Pandas DataFrame 中逐行标记将列从 0 更改为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55664400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com