【发布时间】:2021-09-30 11:15:51
【问题描述】:
我有一个列 Flag1 的数据框,我想检查列标志值 1 是否连续出现最大次数
这是数据框和输出格式
df = pd.DataFrame({'flag':[1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]})
df_out = pd.DataFrame({'max_count':[3]})
【问题讨论】:
标签: python pandas numpy pandas-groupby
我有一个列 Flag1 的数据框,我想检查列标志值 1 是否连续出现最大次数
这是数据框和输出格式
df = pd.DataFrame({'flag':[1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1]})
df_out = pd.DataFrame({'max_count':[3]})
【问题讨论】:
标签: python pandas numpy pandas-groupby
pandas
m = df['flag'].eq(1)
max(m[m].groupby((~m).cumsum()).sum())
itertools.groupby
from itertools import groupby
max(sum(g) for k, g in groupby(df['flag']) if k == 1)
3
【讨论】:
我们可以模仿itertools.groupby style grouping using df.shift +df.ne
m = df['flag'].eq(1)
g = df['flag'].ne(df['flag'].shift()).cumsum()[m]
df[m].groupby(g).count().max()
# flag 3
# dtype: int64
【讨论】:
df[m],我们可以简化g 的定义而不用[m] 选择吗?
df的长度。
我提供了一个类似问题的答案here:
你可以这样做:
s = df['flag']
(s.groupby(((s-s.shift().fillna(0)).eq(1).cumsum()*s))
.transform(len)*s
).max()
输出:3
【讨论】: