首页 > 解决方案 > 在某些季节使用 pivot_table 或 pd.groupby

问题描述

我有如下数据集:

      Year Month  Dryden  3rdAve  Clark  Landfill
0      2015     1    0.00    0.00    0.0       NaN
1      2015     1    0.00    0.00    0.0       NaN
2      2015     1    0.00    0.00    0.0       NaN
3      2015     1    0.00    0.00    0.0       NaN
4      2015     1    0.00    0.00    0.0       NaN
5      2015     1    0.00    0.00    0.0       NaN
6      2015     1    0.00    0.00    0.0       NaN
7      2015     1    0.00    0.00    0.0       NaN
8      2015     1    0.00    0.00    0.0       NaN
9      2015     1    0.00    0.00    0.0       NaN
10     2015     1    0.00    0.00    0.0       NaN
11     2015     1    0.00    0.00    0.0       NaN

我想运行下面的代码来计算每个季节的 Dryden 值的平均值:

df.Dryden.groupby([df.Year,pd.cut(df.Month,[0,3,6,9,12],labels=['Winter','Spring','Summer','Autumn'],right =False)]).mean()

我收到此错误:

TypeError:“int”和“str”的实例之间不支持“>”

df.dtype 给了我:

Year          int64
Month        object
Dryden      float64
3rdAve      float64
Clark       float64
Landfill    float64
dtype: object

我想知道是否有人可以帮助我。

标签: pythonpandas

解决方案


将您的 Month 列转换为这样的整数:

df.Month = df.Month.astype(int)

然后运行您的代码:

In [61]: df.Dryden.groupby([df.Year,pd.cut(df.Month,[0,3,6,9,12],labels=['Winter','Spring','Summer','Autumn'],right =False)]).mean()
Out[61]: 
Year  Month 
2015  Winter    0.0
Name: Dryden, dtype: float64

如果你得到一个值错误,也许这可以代替:

df.Month = pd.to_numeric(df.Month, errors='coerce')

推荐阅读