比方说,我有一个数据框,其中包含每个国家/地区的活动案例数与先前值的差异:
[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代码行来执行此任务?
答案 0 :(得分:1)
您可以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
答案 1 :(得分:0)