猿问

多列条件计数,同时聚合时间列(python 的数据帧)上的值和发生总数的百分比

这是一个棘手的问题,我将直接用一个例子来解释它


假设我们有这个数据框


ID Week  Alarm1   Alarm2

0   1    false    false

1   1     true    false

2   1    false    true

4   2    false    false

5   2     true    true

6   2    false    true

7   2    false    true

8   3     true    true

9   3     true    true

现在我想按周汇总它们,保留列 alarm1 和 alarm2 并计算那些为真的:


Week Alarm1 Alarm2

 1     1      1

 2     1      3

 3     2      2 

尝试了一些类似的东西:data.groupby(["week","Alarm1","Alarm2"]).size()但正如预期的那样,我只得到一张包含所有可能的假/真选项的表格)


额外的问题:如果现在我想要 % 怎么办?第 3 周的总行数较少,因此我希望这些警报的权重更大。我很想将每个值动态除以每周的总行数以获得如下结果:


Week Alarm1 Alarm2

 1    0.33   0.33

 2    0.25   0.75

 3     1       1 


桃花长相依
浏览 213回答 2
2回答

Smart猫小萌

对于第一部分:(如果 ID 不是列,则忽略放置并继续执行其余代码)>>df.drop('ID',axis=1).replace({True:1, False:0}).groupby('Week').sum().reset_index()    Week    Alarm1  Alarm20   1       1       11   2       1       32   3       2       2对于第二部分:df.groupby('Week')['Alarm1','Alarm2'].apply(lambda x: x.sum()/x.count()).reset_index()    Week    Alarm1  Alarm20   1   0.333333    0.3333331   2   0.250000    0.7500002   3   1.000000    1.000000

富国沪深

只是这样做:data.groupby('Week').sum()获取真值的个数(记住 True=1, False=0)。要获得百分比,只需执行以下操作:data.groupby('week').sum()/data.groupby('week').count()
随时随地看视频慕课网APP

相关分类

Python
我要回答