gpt4 book ai didi

python - count() 结果中的奇怪事情。需要澄清

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:50 24 4
gpt4 key购买 nike

我有一个具有以下结构的初始数据帧(ETH1-ETH3 中的参数只是为了示例而设计的,以表明每个警报都有不同的 ETH1-ETH3 参数集并且可以包含零):

       | Site |   Date   | Alarm | ETH1 | ETH2 | ETH 3|
| AR21 | 25-01-19 | AL1 | 1 | 0 | 3 |
| AR22 | 25-01-19 | AL2 | 0 | 0 | 1 |
| AR23 | 26-01-19 | AL1 | 1 | 1 | 0 |
| AR21 | 26-01-19 | AL2 | 0 | 1 | 0 |

我正在应用 groupby 方法,因此我想查看在日期期间每个警报的每个站点的每个 ETH1-ETH3 参数发生了多少次。

cols = ['Site', 'Date', 'Alarm']
df.groupby(cols)[['ETH1', 'ETH2', 'ETH3']].count()

这实际上给我的结果是每天所有站点中的所有警报在所有 ETH1-ETH3 列中都有“2”,即使此警报的特定站点在该列中为 0。

当我应用 sum() 时,我看到那些在列中有 0 的网站仍然有零。但为什么 count() 在计数中包含零?

如何实现列为0不计数,只统计大于0的列出现的次数?

最佳答案

您需要将 0 替换为 nan,因为 DataFrame.count排除缺失值:

cols = ['Site', 'Date', 'Alarm']
df = df.mask(df == 0, np.nan).groupby(cols)['ETH1', 'ETH2', 'ETH3'].count()
print (df)
ETH1 ETH2 ETH3
Site Date Alarm
AR21 25-01-19 AL1 1 0 1
26-01-19 AL2 0 1 0
AR22 25-01-19 AL2 0 0 1
AR23 26-01-19 AL1 1 1 0

另一个想法是将 bool 掩码转换为整数并使用sum:

cols = ['Site', 'Date', 'Alarm']
cols1 = ['ETH1', 'ETH2', 'ETH3']

df[cols1] = df[cols1].ne(0).astype('int')
df = df.groupby(cols)[cols1].sum()
print (df)
ETH1 ETH2 ETH3
Site Date Alarm
AR21 25-01-19 AL1 1 0 1
26-01-19 AL2 0 1 0
AR22 25-01-19 AL2 0 0 1
AR23 26-01-19 AL1 1 1 0

关于python - count() 结果中的奇怪事情。需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57783961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com