我正在尝试将温度数据的 csv 文件拆分为较小的字典,以便我可以计算每个月的平均温度。 csv 文件的格式如下:
AirTemperature AirHumidity SoilTemperature SoilMoisture LightIntensity WindSpeed Year Month Day Hour Minute Second TimeStamp MonthCategorical
12 68 19 65 60 2 2016 1 1 0 1 1 10100 January
18 34 14 42 19 0 2016 1 1 1 1 1 10101 January
19 98 14 41 30 4 2016 1 1 2 1 1 10102 January
16 88 16 68 54 4 2016 1 1 3 1 1 10103 January
16 44 20 41 10 1 2016 1 1 4 1 1 10104 January
22 54 18 65 94 0 2016 1 1 5 1 1 10105 January
18 84 17 41 40 4 2016 1 1 6 1 1 10106 January
20 88 22 92 31 0 2016 1 1 7 1 1 10107 January
23 1 22 59 3 0 2016 1 1 8 1 1 10108 January
23 3 22 72 41 4 2016 1 1 9 1 1 10109 January
24 63 23 83 85 0 2016 1 1 10 1 1 10110 January
29 73 27 50 1 4 2016 1 1 11 1 1 10111 January
28 37 30 46 29 3 2016 1 1 12 1 1 10112 January
30 99 32 78 73 4 2016 1 1 13 1 1 10113 January
32 72 31 80 80 1 2016 1 1 14 1 1 10114 January
6 个月内每天有 24 个读数。
我可以使用以下代码完成一半:
for row in df['AirTemperature']:
for equivalentRow in df['MonthCategorical']:
if equivalentRow == "January":
JanuaryAirTemperatures.append(row)
但此输出的每个 AirTemp 值都重复包含值一月的行数。 IE。而不是 12,18,19 等,而是 12, 12, 12, 12, 12, 18, 18, 18, 18, 18, 19, 19, 19, 19
我尝试了以下方法:
for row in df['AirTemperature']:
if df['MonthCategorical'] == "January":
JanuaryAirTemperatures.append(row)
但我收到以下错误:ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我假设是因为它试图查看整个列而不是等效的行。
最佳答案
IIUC,您可以按月分组并获取每月气温的平均值:
g = df.groupby('MonthCategorical')['AirTemperature'].mean().reset_index(name='MeanAirTemperature')
返回:
MonthCategorical MeanAirTemperature
0 January 22
然后,您可以选择要分组的列(即,您可以仅按 Month
分组,而不是 MonthCategorical
...)。
编辑:
您还可以使用 transform
获取新列以附加到原始数据帧:
df['MeanAirTemperature'] = df.groupby('MonthCategorical')['AirTemperature'].transform('mean')
关于python - 根据另一列拆分 csv 文件的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871090/