DataFrame 按小时分组并为特定列取平均值

DataFrame groupby hour and do the mean for a specific column

考虑以下DataFrame

    Year    Month   Day Hour    1   2   4   5   6   7   Solar
0   2019    01  01  00  3856    6074    2123    3634    2219    2449    29
1   2019    01  01  00  3856    6072    2038    3443    2376    2644    29
2   2019    01  01  00  3862    6074    1916    3341    2734    2522    29
3   2019    01  01  00  3815    6074    1882    3135    2880    2556    29
4   2019    01  01  00  3751    6073    1855    3055    2940    2651    30
5   2019    01  01  00  3763    6071    1844    2978    2907    2628    29
6   2019    01  01  01  3808    6072    1842    2898    2868    2557    29
7   2019    01  01  01  3799    6074    1743    3559    2838    1844    29
8   2019    01  01  01  3810    6073    1688    3305    2766    1958    29
9   2019    01  01  01  3798    6075    1696    3142    2645    2048    30
10  2019    01  01  01  3740    6072    1678    3096    2598    2056    29

为了得到每小时(第 3 列)“太阳能”(第 11 列)的平均值,我尝试了

1.

df['Solar_Mean'] = df.groupby(['Hour'])['Solar'].mean()

"Solar_Mean" 只会得到 nan

    Solar_Mean
0   nan
1   nan
2   nan
3   nan
4   nan
5   nan
df['Solar_Mean'] = df.groupby(['Hour'])['Solar'].transform('mean')

给出

    Solar_Mean
0   272.4290164663996
1   272.4290164663996
2   272.4290164663996
3   272.4290164663996
4   272.4290164663996
5   272.4290164663996
df['Solar_Mean'] = df.groupby(['Hour'])['Solar'].transform(np.mean)

这与第二种方法相同。

    Solar_Mean
0   272.4290164663996
1   272.4290164663996
2   272.4290164663996
3   272.4290164663996
4   272.4290164663996
5   272.4290164663996

由于每小时有 6 个文件,如果将前 6 个文件的总和除以 6,则得到 29.1666666667,这应该是正确的值。我在这里错过了什么?

我在使用 groupby 时没有考虑 YearMonthDay。本来应该是这样的

df['Solar_Mean'] = df.groupby(['Year', 'Month', 'Day', 'Hour'])['Solar'].transform('mean')

给出

    Solar_Mean
0   29.166666666666668
1   29.166666666666668
2   29.166666666666668
3   29.166666666666668
4   29.166666666666668
5   29.166666666666668