Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为dataframe中的所有列计算超过阈值的连续值_Python_Pandas_Numpy - Fatal编程技术网

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,那么可以显示这两个值中每个值的重复值量吗?