如何计算彼此紧随其后的最真实的数字?

2024-05-12 23:51:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我每行都有一个对错。如何计算相互跟踪的True并选择其最大值

例如:

True,True,True,True,False,True,True,True,True,True,True,False,True

答复:

4,6,1 ----> the answer is 6!

我有一个数据框,我必须为每一行这样做:

    diff0   diff1   diff2   diff3   diff4   diff5   diff6   diff7   diff8   diff9
0   True    True    True    False   True    False   False   True    False   True
1   False   False   False   False   False   False   False   False   False   False
2   False   False   False   False   False   False   False   False   False   False
3   True    False   False   False   True    False   True    False   False   False
4   True    False   True    False   False   True    False   False   False   False

例如,第一行是3


Tags: the数据answerfalsetrueisdiff1diff2
3条回答

尝试:

lst = [True,True,True,True,False,True,True,True,True,True,True,False,True]
from itertools import groupby
>>> max(sum(1 for i in c if i) for n, c in groupby(lst))
6

编辑:要为数据帧的每一行实现此功能,可以执行以下操作:

df["seq"] = df.apply(lambda x: max(sum(1 for i in c if i) for n, c in groupby(x)), axis=1)
>>> df
   diff0  diff1  diff2  diff3  diff4  diff5  diff6  diff7  diff8  diff9  seq
0   True   True   True  False   True  False  False   True  False   True    3
1  False  False  False  False  False  False  False  False  False  False    0
2  False  False  False  False  False  False  False  False  False  False    0
3   True  False  False  False   True  False   True  False  False  False    1
4   True  False   True  False  False   True  False  False  False  False    1

您可以使用itertools中的groupby

from itertools import groupby

max(sum(1 for v in vals) for k, vals in groupby(bools) if k)
  • groupby()序列发生变化的地方
  • 使用count()获取每个序列的长度
  • 然后是max()长度序列
import pandas as pd

df = pd.DataFrame({"seq":[True,True,True,True,False,True,True,True,True,True,True,False,True]})

df.groupby((df["seq"]!=df["seq"].shift()).cumsum()).count().max()

输出

seq    6
dtype: int64

逐行而不是单列

  • agg()函数从count()更改为sum(),因此只考虑True
import io
df = pd.read_csv(io.StringIO("""    diff0   diff1   diff2   diff3   diff4   diff5   diff6   diff7   diff8   diff9
0   True    True    True    False   True    False   False   True    False   True
1   False   False   False   False   False   False   False   False   False   False
2   False   False   False   False   False   False   False   False   False   False
3   True    False   False   False   True    False   True    False   False   False
4   True    False   True    False   False   True    False   False   False   False"""), sep="\s+")

dft = df.T
df["maxslen"] = [dft.groupby((dft[c]!=dft[c].shift()).cumsum()).sum().max()[c] for c in dft.columns]

输出

^{tb1}$

相关问题 更多 >