首页 > 解决方案 > 如何检查5行熊猫的每个值是否连续相同

问题描述

我有两个数据框,其中 5 行的 df1 列“A”值相同,然后再更改,接下来的 5 行相同,df2 列“A”值是随机的,没有连续的相同值。

如果检测到 df1 条件 flag==1 并且检测到 df2 条件 flag==0,我想使用 np.where () 给出标志

这里需要找到一种方法,在检测到连续值时检测标志 1,在数据帧中未检测到连续值时检测标志 0。

df1=pd.DataFrame({'A':[1,1,1,1,8,8,8,8,8,15,15,15]})-------> flag==1
df2=pd.DataFrame({'A':[1,3,4,7,8,11,1,15,20,15,16,87]})-----flag==0

标签: pythonpandasnumpypandas-groupby

解决方案


您可以使用pd.Series.shiftand 检查相等性 and pd.Series.cumsum,然后使用GroupBy.sizewithpd.Series.eq和最后使用pd.Series.any

g = df1['A'].ne(df1['A'].shift()).cumsum()
flag = df1.groupby(g).size().eq(5).any()# if you want consider consecutive elements
# True                                  # greater than equal to 5 replace `.eq` with `.ge`

g1 = df2['A'].ne(df2['A'].shift()).cumsum()
flag2 = df2.groupby(g1).size().eq(5).any()
# False

推荐阅读