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 时可以在输出中编辑吗?