计算在另一列中按年份分组的一列中布尔值从True变为False的次数



我有一个pandas数据框架,它有一个year列和一个boolean列,我想计算每年true变为false的次数。

<表类> 年 布尔 tbody><<tr>2019对2019假2019对2019假2020对2020对2020假2021假2021对2021对2021假

您需要按组计数,为此您可以按年分组,将布尔值转换为整数,并在diff后计算-1值:

df.groupby('Year')['Boolean'].apply(lambda s: s.astype(int).diff().eq(-1).sum())

与您的初始方法不同:

df.groupby('Year')['Boolean'].apply(lambda s: (s&s.ne(s.shift())).sum())

输出:

Year
2019    2
2020    1
2021    1
Name: Boolean, dtype: int64

你可以这样做:

df['Changes'] = df.groupby('Year').apply(lambda b: ~b & b.shift(1).fillna(False))

df at this:

Year    Boolean Changes
0   2019    True    False
1   2019    False   True
2   2019    True    False
3   2019    False   True
4   2020    True    False
5   2020    True    False
6   2020    False   True
7   2021    False   False
8   2021    True    False
9   2021    True    False
10  2021    False   True

,然后分组和求和:

df = df.groupby('Year',as_index=False)['Changes'].sum()

输出:

Year    Changes
0   2019    2
1   2020    1
2   2021    1

最新更新