Как я могу подсчитать элемент в определенных c интервалах в кадре данных? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть фрейм данных, как показано ниже, где столбцы в c01 представляют время начала, а c04 - конец временных интервалов:

    c01 c04
1742    8.444991    14.022029
3786    29.91143    31.422439
3951    29.91143    31.145099
5402    37.81136    42.689595
8230    63.12394    65.34602

также такой список (на самом деле он намного длиннее):

8.522494
8.54471
8.578426
8.611193
8.644996
8.678053
8.710918
8.744901
8.777851
8.811053
8.844867
8.878389
8.912099
8.944729
8.977601
9.011232
9.04492
9.078157
9.111946
9.144788
9.177663
9.211054
9.245265
9.27805
9.311766
9.344647
9.377612
9.411709

Я бы хотел подсчитать, сколько элементов в списке попадает в интервалы, показанные фреймом данных, где я закодировал так:

count = 0
for index, row in speech.iterrows():
  count += gtls.count(lambda i : i in [row['c01'], row['c04']])

файл работает как единое целое, но все 'count' оказывается равным 0, скажите, пожалуйста, где я напортачил?

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Я позволил себе преобразовать ваш список в numpy array () (я назвал его arr). Затем вы можете использовать функцию применения для создания столбца подсчета. Предположим, ваш фрейм данных называется df.

def get_count(row): #the logic for your summation is here
    return np.sum([(row['c01'] < arr) & (row['c04'] >= arr)]) 

df['C_sum'] = df.apply(get_count, axis = 1)

print(df)

Вывод:

         c01        c04  C_sum
0   8.444991  14.022029     28
1  29.911430  31.422439      0
2  29.911430  31.145099      0
3  37.811360  42.689595      0
4  63.123940  65.346020      0

Вы также можете сделать все это в одной строке, используя лямбда:

df['C_sum'] = df.apply(lambda row: np.sum([(row['c01'] < arr) & (row['c04'] >= arr)]), axis = 1)
0 голосов
/ 18 июня 2020

Добро пожаловать в Stack Overflow! i in [row['c01'], row['c04']] не делает то, что вы думаете; он обозначает проверку, можно ли найти элемент i из двухэлементного списка, вместо проверки диапазона между row['c01'] и row['c04']. Чтобы проверить, находится ли число с плавающей запятой в пределах диапазона, используйте row['c01'] < i < row['c04'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...