【发布时间】:2020-04-10 22:37:43
【问题描述】:
风数据样本:
`.................RPT VAL ROS KIL SHA BIR DUB CLA MUL CLO BEL MAL
DATE
1961-01-04 10.58 6.63 11.75 4.58 4.54 2.88 8.63 1.79 5.83 5.88 5.46 10.88
1961-01-05 13.33 13.25 11.42 6.17 10.71 8.21 11.92 6.54 10.92 10.34 12.92 11.83
1961-01-06 13.21 8.12 9.96 6.67 5.37 4.50 10.67 4.42 7.17 7.50 8.12 13.17
1961-02-07 13.50 14.29 9.50 4.96 12.29 8.33 9.17 9.29 7.58 7.96 13.96 13.79
1961-02-08 10.96 9.75 7.62 5.91 9.62 7.29 14.29 7.62 9.25 10.46 16.62 16.46
1961-03-04 10.58 6.63 11.75 4.58 4.54 2.88 8.63 1.79 5.83 5.88 5.46 10.88
1962-03-05 13.33 13.25 11.42 6.17 10.71 8.21 11.92 6.54 10.92 10.34 12.92 11.83
1962-06-06 13.21 8.12 9.96 6.67 5.37 4.50 10.67 4.42 7.17 7.50 8.12 13.17
1968-07-07 13.50 14.29 9.50 4.96 12.29 8.33 9.17 9.29 7.58 7.96 13.96 13.79
1968-07-08 10.96 9.75 7.62 5.91 9.62 7.29 14.29 7.62 9.25 10.46 16.62 16.46
1976-08-04 10.58 6.63 11.75 4.58 4.54 2.88 8.63 1.79 5.83 5.88 5.46 10.88
1976-08-05 13.33 13.25 11.42 6.17 10.71 8.21 11.92 6.54 10.92 10.34 12.92 11.83
1978-09-06 13.21 8.12 9.96 6.67 5.37 4.50 10.67 4.42 7.17 7.50 8.12 13.17
1978-09-07 13.50 14.29 9.50 4.96 12.29 8.33 9.17 9.29 7.58 7.96 13.96 13.79
1978-12-08 10.96 9.75 7.62 5.91 9.62 7.29 14.29 7.62 9.25 10.46 16.62 16.46`
完整的数据集在 [这里][1]。
在此数据集中,列是位置,值是风速。我想计算数据集中每个月的风速。但我想将 1961 年 1 月和 1962 年 1 月视为不同的月份。 我试着用for循环来做。首先,我创建了一个列名“月”,然后我使用 for 循环分配值,如下所示:
`for i in range(len(data.index)):
if data.index[i].month == 1:
if data.index[i].year == 1961:
data['Month'][i] = 'January 61'
elif data.index[i].year == 1962:
data['Month'][i] = 'January 62'
else:
data['Month'][i] = 'January'
elif data.index[i].month == 2:
data['Month'][i] = 'February'
elif data.index[i].month == 3:
data['Month'][i] = 'March'
elif data.index[i].month == 4:
data['Month'][i] = 'April'
elif data.index[i].month == 5:
data['Month'][i] = 'May'
elif data.index[i].month == 6:
data['Month'][i] = 'June'
elif data.index[i].month == 7:
data['Month'][i] = 'July'
elif data.index[i].month == 8:
data['Month'][i] = 'August'
elif data.index[i].month == 9:
data['Month'][i] = 'September'
elif data.index[i].month == 10:
data['Month'][i] = 'October'
elif data.index[i].month == 11:
data['Month'][i] = 'November'
elif data.index[i].month == 12:
data['Month'][i] = 'December'`
然后我会在data['Month'] 上使用groupby,然后找到平均值。但它需要很长时间才能运行,我不想每次运行这个程序时都等待这么长时间。我还能怎么解决这个问题?
注意 - 实际数据集与示例数据集并不完全相同。我将列 ['Yr', 'Mo', 'Dy'] 合并到一个名为“DATE”的列中,然后将“DATE”设为索引。我还使用data.dropna(inplace=True) 删除了所有NaN 值。
[1]:
【问题讨论】:
-
也许可以尝试通过组合来自原始数据集的
Yr和Mo或Date的前7 个字符来为year-month添加一列,您可以在上面使用groupby。 -
根据您的预期输出,您可以将
date指定为 df 使用df.groupby(pd.Grouper(freq="M")).mean().dropna()的index