首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:如何在新冠肺炎数据帧中找到局部疫情达到高峰的平均天数?

熊猫:如何在新冠肺炎数据帧中找到局部疫情达到高峰的平均天数?
EN

Stack Overflow用户
提问于 2020-05-02 09:11:50
回答 2查看 55关注 0票数 1

假设我有一个数据帧,其中包含每个国家/地区的活动案例数与之前的值之间的差异:

代码语言:javascript
复制
[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

我需要在这个新冠肺炎数据框中找到局部疫情达到高峰的平均天数。

我的解决方案是找到每列中第一个负值的第n行(例如,“澳大利亚”中第一个负值的第n行: 3,“阿尔巴尼亚”中第一个负值的第n行: 5),并对其进行平均。

但是,我不知道如何在Panda/Python中做到这一点。

有没有什么方法可以用简单的Python/Panda代码行来执行这个任务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-02 09:21:03

您可以对列Day(s) since outbreak执行set_index操作,然后使用iloc选择除第一行之外的所有行,然后检查值小于(lt) 0的位置。使用idxmax获取值小于0的第一行,并获取mean。通过您的输入,它可以提供:

代码语言:javascript
复制
print (df.set_index('Day(s) since outbreak')\
         .iloc[1:, :].lt(0).idxmax().astype(float).mean()) 
3.6666666666666665
票数 1
EN

Stack Overflow用户

发布于 2020-05-02 09:40:12

使用df.where掩模负片并用np.NaN替换正片,然后计算平均值

代码语言:javascript
复制
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()

结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61553229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档