熊猫:如何找到在COVID-19数据框中达到局部爆发高峰的平均天数?

时间:2020-05-02 01:11:50

标签: python pandas numpy dataframe

比方说,我有一个数据框,其中包含每个国家/地区的活动案例数与先前值的差异:

[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数据框中达到局部爆发高峰的平均天数。

我的解决方案是在每列中找到第一个负值的第n行(例如,“ Australia”中的第一个负值的n行:3,“ Albania”中的第一个负值的n行:5)并取平均值它。

但是,我不知道如何在Panda / Python中执行此操作。

有没有办法用简单的Python / Panda代码行来执行此任务?

2 个答案:

答案 0 :(得分:1)

您可以set_indexDay(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

答案 1 :(得分:0)

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