gpt4 book ai didi

python - 计算行元素的变化

转载 作者:行者123 更新时间:2023-11-28 17:35:53 24 4
gpt4 key购买 nike

我正在处理一个列中包含字符串的数据集,我需要计算该列的数据框中的更改次数。因此,如果数据框按“id”列分组,一个组实例将如下例所示:

    id    vehicle
'abc' 'bmw'
'abc' 'bmw'
'abc' 'yamaha'
'abc' 'suzuki'
'abc' 'suzuki'
'abc' 'kawasaki'

所以在这种情况下,我想说 id 'abc' 改变了汽车品牌 3 次。是否有一种有效的方法可以针对“id”列的多个组执行此操作?

最佳答案

我可以想到两种方法:

1) groupby在“id”上并调用 apply在 'vehicle' 列并传递方法 nunique,您必须减去 1,因为您正在寻找变化而不仅仅是一个整体的唯一计数:

In [292]:
df.groupby('id')['vehicle'].nunique() -1

Out[292]:
id
'abc' 3
Name: vehicle, dtype: int64

2) apply使用 shift 测试当前车辆是否不等于前一车辆的 lambda , 这在语义上更正确,因为它检测到变化而不仅仅是整体唯一计数,调用 sum on booleans 会将 TrueFalse 分别转换为 10:

In [293]:
df.groupby('id')['vehicle'].apply(lambda x: x != x.shift()).sum() - 1

Out[293]:
3

上面的 -1 是必需的,因为第一行将与不存在的行进行比较,与 NaN 的比较没有意义在这种情况下,请参见下文:

In [301]:
df.groupby('id')['vehicle'].apply(lambda x: x != x.shift())

Out[301]:
0 True
1 False
2 True
3 True
4 False
5 True
Name: 'abc', dtype: bool

关于python - 计算行元素的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30613115/

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