Python 为dataframe中的所有列计算超过阈值的连续值
我有以下建议:Python 为dataframe中的所有列计算超过阈值的连续值,python,pandas,numpy,Python,Pandas,Numpy,我有以下建议: A B C 0 47 50 22 1 47 53 28 2 47 65 33 3 47 62 33 4 47 62 33 5 47 62 33 6 47 62 33 7 47 62 33 我想创建一个数组,数组中任何值自身重复5次以上的次数,然后求和。在上
A B C
0 47 50 22
1 47 53 28
2 47 65 33
3 47 62 33
4 47 62 33
5 47 62 33
6 47 62 33
7 47 62 33
我想创建一个数组,数组中任何值自身重复5次以上的次数,然后求和。在上面的示例中,我希望它的输出是:
output = [8 5 6]
有没有一种方法可以用熊猫来做?我几乎得到了正确的输出,但是使用for循环,因为我有+1000列和近7000行,所以需要的时间太长。这就是您需要的吗
s=df.melt()
s.value.value_counts().loc[lambda x : x>=5]
47 8
33 6
62 5
Name: value, dtype: int64
更新
s=df.melt()
s.groupby(list(s)).size().loc[lambda x : x>=5]
variable value
A 47 8
B 62 5
C 33 6
dtype: int64
这是你需要的吗
s=df.melt()
s.value.value_counts().loc[lambda x : x>=5]
47 8
33 6
62 5
Name: value, dtype: int64
更新
s=df.melt()
s.groupby(list(s)).size().loc[lambda x : x>=5]
variable value
A 47 8
B 62 5
C 33 6
dtype: int64
IIUC,您要查找每列中的连续块并将其大小相加:
# compare cells with previous
# and stack into a series
s = df.eq(df.shift()).melt()
# groups of consecutive equal values
groups = (~s['value']).groupby(s['variable']).cumsum()
(s.groupby(['variable', groups])
.size()
.loc[lambda x: x>=5] # stole from BEN's answer
.groupby(level=0).sum() # replace this line with sum(level=0) would also work
)
输出:
variable
A 8
B 5
C 6
dtype: int64
IIUC,您要查找每列中的连续块并将其大小相加:
# compare cells with previous
# and stack into a series
s = df.eq(df.shift()).melt()
# groups of consecutive equal values
groups = (~s['value']).groupby(s['variable']).cumsum()
(s.groupby(['variable', groups])
.size()
.loc[lambda x: x>=5] # stole from BEN's answer
.groupby(level=0).sum() # replace this line with sum(level=0) would also work
)
输出:
variable
A 8
B 5
C 6
dtype: int64
你好如果你有两个不同的整数,它们的相同频率大于5,那该怎么办?你可以使用集合库中的计数器来做。你是在分别计算每一列吗?你好!如果你有两个不同的整数,其相同的频率大于5,你可以使用集合库中的计数器来做。你是在分别计算每一列吗?嘿@YOBEN_S,几乎是这样,我想将计数分配给每一列,这样在输出数组中,我只有一个根据['a''B''C']标签的计数。哪个值在重复对我来说并不重要,只是每个列的计数哦,太完美了!现在效果很好,非常感谢!!该解决方案是否可能对阈值有限制?我增加到72个连续值,我想它会返回47个值,例如,数据帧中存在的值,而不是特定的连续值。@PedrodeSá你能分享更多信息吗?@PedrodeSálimit=5;l=[df[x].groupby[df[x],df[x].diff.ne0.cumsum].size.loc[lambda x:x>=limit]用于listdf中的x],试试这个应该很快,因为循环并不总是坏的。嘿@YOBEN__S,几乎就是这样,我想将计数分配给每一列,这样在输出数组中,根据['a''B''C']标签,我只有一个计数。哪个值在重复对我来说并不重要,只是每个列的计数哦,太完美了!现在效果很好,非常感谢!!该解决方案是否可能对阈值有限制?我增加到72个连续值,我想它会返回47个值,例如,数据帧中存在的值,而不是特定的连续值。@PedrodeSá你能分享更多信息吗?@PedrodeSálimit=5;l=[df[x].groupby[df[x],df[x].diff.ne0.cumsum].size.loc[lambda x:x>=limit]用于listdf中的x],试试这个应该很快,因为循环不总是坏的。非常感谢@Quang Hoang!这正是我要找的!嘿@Quang Hoang,有没有办法显示每个变量A、B、C重复的每个值的数量。。。比如YOBEN_的答案的更新版本?在我上面的设备A示例中,我们只有47个重复值,但是如果我们有47和55,那么可以显示这两个值中每个值的重复值的数量?非常感谢@Quang Hoang!这正是我要找的!嘿@Quang Hoang,有没有办法显示每个变量A、B、C重复的每个值的数量。。。比如YOBEN_的答案的更新版本?在我上面关于设备A的示例中,我们只有47个重复值,但是如果我们有47和55,那么可以显示这两个值中每个值的重复值量吗?