我有一个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