Pandas 数据帧平均值
Pandas Data Frame Average Values
我有一个大型数据集,如下所示:
Year Month Day Hour Count Value
2017 1 1 1 59 0
.. .. .. .. .. ..
2011 12 29 23 60 12
我正在尝试使用 Pandas 生成同一月、日和小时的值列的平均值。
我以前用过这个:
df = pd.read_csv('pathtofile/values.csv')
df1 = df.groupby([df.Month,df.Day,df.Hour]).mean()
然而,新的 df1 不会对“值”列求平均值,但它会为“计数”和“年份”列提供平均值(我对此不感兴趣)。我认为这与值列中的数据有关,因为大多数值都是零。我尝试用空值替换所有零值,但无济于事。
有什么我想念的吗?
尝试
df['Value'] = df['Value'].apply(pd.to_numeric, errors='coerce')
df.groupby(['Month', 'Day', 'Hour']).agg({'Value': np.mean})
我能够按预期获得代码 运行。
我制作了自己的测试文件 'values.txt' 看起来像
Year,Month,Day,Hour,Count,Value
2017,1,1,1,59,0
2016,1,1,1,45,12
2014,2,3,4,34,43
2013,1,1,1,12,56
然后我进入了
>>> import pandas as pd
>>> df = pd.read_csv('values.txt')
>>> df
Year Month Day Hour Count Value
0 2017 1 1 1 59 0
1 2016 1 1 1 45 12
2 2014 2 3 4 34 43
3 2013 1 1 1 12 56
最后我通过
达到了我相信你想要的结果
>>> df1 = df.groupby(['Month', 'Day', 'Hour'])
>>> df1['Value'].mean()
Month Day Hour
1 1 1 22.666667
2 3 4 43.000000
Name: Value, dtype: float64
我想我同意 Paul H 的观点,你应该检查该列是否为字符串。因为我也成功了:
>>> df1 = df.groupby(['Month', 'Day', 'Hour']).mean()
>>> df1
Year Count Value
Month Day Hour
1 1 1 2015.333333 38.666667 22.666667
2 3 4 2014.000000 34.000000 43.000000
打印 df1 时可以在输出中编辑吗?
我有一个大型数据集,如下所示:
Year Month Day Hour Count Value
2017 1 1 1 59 0
.. .. .. .. .. ..
2011 12 29 23 60 12
我正在尝试使用 Pandas 生成同一月、日和小时的值列的平均值。
我以前用过这个:
df = pd.read_csv('pathtofile/values.csv')
df1 = df.groupby([df.Month,df.Day,df.Hour]).mean()
然而,新的 df1 不会对“值”列求平均值,但它会为“计数”和“年份”列提供平均值(我对此不感兴趣)。我认为这与值列中的数据有关,因为大多数值都是零。我尝试用空值替换所有零值,但无济于事。
有什么我想念的吗?
尝试
df['Value'] = df['Value'].apply(pd.to_numeric, errors='coerce')
df.groupby(['Month', 'Day', 'Hour']).agg({'Value': np.mean})
我能够按预期获得代码 运行。
我制作了自己的测试文件 'values.txt' 看起来像
Year,Month,Day,Hour,Count,Value
2017,1,1,1,59,0
2016,1,1,1,45,12
2014,2,3,4,34,43
2013,1,1,1,12,56
然后我进入了
>>> import pandas as pd
>>> df = pd.read_csv('values.txt')
>>> df
Year Month Day Hour Count Value
0 2017 1 1 1 59 0
1 2016 1 1 1 45 12
2 2014 2 3 4 34 43
3 2013 1 1 1 12 56
最后我通过
达到了我相信你想要的结果>>> df1 = df.groupby(['Month', 'Day', 'Hour'])
>>> df1['Value'].mean()
Month Day Hour
1 1 1 22.666667
2 3 4 43.000000
Name: Value, dtype: float64
我想我同意 Paul H 的观点,你应该检查该列是否为字符串。因为我也成功了:
>>> df1 = df.groupby(['Month', 'Day', 'Hour']).mean()
>>> df1
Year Count Value
Month Day Hour
1 1 1 2015.333333 38.666667 22.666667
2 3 4 2014.000000 34.000000 43.000000
打印 df1 时可以在输出中编辑吗?