【发布时间】:2021-03-30 13:31:43
【问题描述】:
我有一个 pandas DataFrame,它的行中包含 1 和 0。我想计算我的 DataFrame 中连续 1 组的数量。我再说一遍,我不是在问连续 1 的数量,网上有很多关于它的例子。
更准确地说:
假设我的 pd.DataFrame 的行是:
index value
0 0
1 1
2 1
3 0
4 0
5 1
6 0
7 1
8 0
9 1
我希望输出为 4
【问题讨论】:
我有一个 pandas DataFrame,它的行中包含 1 和 0。我想计算我的 DataFrame 中连续 1 组的数量。我再说一遍,我不是在问连续 1 的数量,网上有很多关于它的例子。
更准确地说:
假设我的 pd.DataFrame 的行是:
index value
0 0
1 1
2 1
3 0
4 0
5 1
6 0
7 1
8 0
9 1
我希望输出为 4
【问题讨论】:
尝试:
只有在开头或结尾没有 1 时才有效。
df['value'].diff().eq(1).sum()
在系列的顶部和底部添加 0:
pd.concat([pd.Series([0]), df.value, pd.Series([0])]).diff().eq(1).sum()
4
【讨论】:
也许你可以使用itertools.groupby:
>>> import pandas as pd
>>> from itertools import groupby
>>> d = {'value': [0, 1, 1, 0, 0, 1, 0, 1, 0, 1]}
>>> df = pd.DataFrame(data=d)
>>> df
value
0 0
1 1
2 1
3 0
4 0
5 1
6 0
7 1
8 0
9 1
>>> sum(k for k, _ in groupby(df['value']))
4
或者,如果密钥可以是 0/1 以外的其他内容,或者您想要更明确:
>>> sum(1 for k, _ in groupby(df['value']) if k == 1)
4
【讨论】:
itertools.groupby 链接。最后,如果这没有帮助,您还可以在 YouTube/Google/DuckDuckGo/Bing 上搜索更多资源/说明。
将值转换为 list ,然后执行以下操作: 这是我的想法,您可能可以找到更有效的方法来做到这一点
Countconsecutiveone=0
i=0
prv_is_one=0
While i<len(Newlist):
if Newlist[i]==1 and prv_is_one==0:
Countconsecutiveone+=1
prv_is_one=1
elif Newlist[i]==0 and prv_is_one==1:
prv_is_one=0
i+=1
【讨论】: