Pandas groupby 计数:仅当数字为

Pandas groupby count: count only if number

我有一个包含多个字段的 DF。例如:

      Year_end  Week_end Integrado Probs  Duration_hours        Router_name
1225      2017         2        si     1             0.7   C3617_AI670_SARA
1562      2017         2        si   N/A            23.0   CF641_PTC70_SARA
1722      2017         2        si     1           314.1   CH126_R1970_SARA
1731      2017         2        si     1           265.9   CH205_BRR70_SARA
1760      2017         2        si   512             1.5   CO068_ARI70_SARA
1936      2017         2        si    32            23.4   CO721_LE370_SARA
2011      2017         2        si   N/A             0.5   CR015_EMP70_SARA
2335      2017         2        si     1           340.3   RJ046_LR170_SARM
2337      2017         2        si   N/A             2.5   RJ077_LR370_SARM
2342      2017         2        si   N/A             2.0   RJ092_RJA70_SARA
2346      2017         2        si     1           338.3   RJ204_LR670_SARM
2350      2017         2        si   N/A             2.7   RJ210_RJC70_SARA

我正在做 groupby,例如:

fieldsX = ['Year_end','Week_end']
f = { 'Router_name':['count'], 'Probs':['count'], 'Duration_hours':['mean'] }
a = a.groupby(fieldsX).agg(f)

这工作正常。唯一的问题是字段 Probs 包含数字和特定字符串 N/A。我只想计算所有数字 但不是 N/A 出现。

因此,count(Router_name) = 12count(Probs) **should** be 7。而不是我的 count(Probs) = 12.

我该怎么做?

谢谢!

这是您遇到的问题的示例:

import pandas as pd

data = dict(letters = list('abc'), numbers=[1,2,'N/A'])

df = pd.DataFrame(data)

# Before
print(df.groupby('letters').count())

# Fix it by converting column to numeric
df.numbers = pd.to_numeric(df.numbers, errors='coerce')

# After
print(df.groupby('letters').count())

将打印:

         numbers
letters         
a              1
b              1
c              1
         numbers
letters         
a              1
b              1
c              0

但是,鉴于您首先拥有 'N/A'...请查看 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas-read-csv,特别是参数:na_values。如果这是您读取数据的方式,则最初应该已经清理过。如果这是您获得数据框的方式。