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) = 12
但 count(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。如果这是您读取数据的方式,则最初应该已经清理过。如果这是您获得数据框的方式。
我有一个包含多个字段的 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) = 12
但 count(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。如果这是您读取数据的方式,则最初应该已经清理过。如果这是您获得数据框的方式。