计算行元素的变化

时间:2015-06-03 07:07:00

标签: python pandas

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

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

所以在这种情况下,我希望能够说id'abc'改变车辆品牌3次。是否有一种有效的方法可以在列'id'的多个组中执行此操作?

1 个答案:

答案 0 :(得分:2)

我可以想到两种方式:

1)在{id'上groupby并在“车辆”列上调用apply并传递方法nunique,您必须减去1,因为您正在寻找更改而不仅仅是总体独特的数量:

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

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

2)apply一个lambda,用于测试当前车辆是否与使用shift的先前车辆不相等,这在语义上更正确,因为它检测到更改而不仅仅是整体唯一计数,调用{关于布尔值的{3}}会将TrueFalse分别转换为10

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

Out[293]:
3

上面需要-1,因为它将与不存在的行进行比较的第一行与NaN的比较在这种情况下没有意义,请参阅下文:< / p>

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