Pandas: Как определить среднюю продолжительность дней для пика локальной вспышки в кадре данных COVID-19? - PullRequest
1 голос
/ 02 мая 2020

Допустим, у меня есть этот фрейм данных, содержащий разницу в количестве активных случаев от предыдущего значения в каждой стране:

[in]
import pandas as pd
import numpy as np
active_cases = {'Day(s) since outbreak':['0', '1', '2', '3', '4', '5'], 'Australia':[np.NaN, 10, 10, -10, -20, -20], 'Albania':[np.NaN, 20, 0, 15, 0, -20], 'Algeria':[np.NaN, 25, 10, -10, 20, -20]}
df = pd.DataFrame(active_cases)
df

[out]
    Day(s) since outbreak   Australia   Albania     Algeria
0             0                   NaN       NaN         NaN
1             1                  10.0      20.0        25.0
2             2                  10.0       0.0        10.0
3             3                 -10.0      15.0       -10.0
4             4                 -20.0       0.0        20.0
5             5                 -20.0     -20.0       -20.0

Мне нужно найти среднюю продолжительность дней для пика локальной вспышки в этом COVID-19 dataframe.

Мое решение состоит в том, чтобы найти n-ю строку с первым отрицательным значением в каждом столбце (например, n-я строка первого отрицательного значения в «Australia»: 3, n-я строка первого отрицательного значения в «Албания»: 5) и усредните его.

Однако я понятия не имею, как это сделать в Panda / Python.

. Есть ли способы выполнить эту задачу с помощью простых линий? кода Python / Panda?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

вы можете set_index столбец Day(s) since outbreak, затем использовать iloc, чтобы выбрать все строки, кроме первой, а затем проверить, где значения меньше (lt) 0. Используйте idxmax, чтобы получить первая строка, где значение меньше 0 и взять mean. С вашим вкладом это дает:

print (df.set_index('Day(s) since outbreak')\
         .iloc[1:, :].lt(0).idxmax().astype(float).mean()) 
3.6666666666666665
0 голосов
/ 02 мая 2020

IICU с использованием df.where маскирует негативы и заменяет позитивы на np.NaN, а затем вычисляет среднее значение

cols= ['Australia','Albania','Algeria']
df.set_index('Day(s) since outbreak', inplace=True)
m = df< 0
df2=df.where(m, np.NaN)
#df2 = df2.replace(0, np.NaN)
df2.mean()

Результат

enter image description here

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