Подсчет последовательных значений выше порога для всех столбцов в кадре данных - PullRequest
1 голос
/ 02 апреля 2020

У меня есть следующее df:

       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]

Есть ли способ сделать это, используя pandas методы? Я почти получил правильный вывод, но использую для циклов, и это занимает слишком много времени, так как у меня +1000 столбцов и почти 7000 строк.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Это то, что вам нужно?

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
1 голос
/ 02 апреля 2020

IIU C, вы хотите найти последовательные блоки в пределах каждого столбца и добавить их размеры:

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...