Pandas:将 CSV 数据从单列重新格式化为多个新列
Pandas: reformatting CSV data from single column into multiple new columns
我对 python 比较陌生,一直在使用 Pandas 来处理科学数据。我有 79 个 CSV 格式的数据集,这些数据集的像素值(很多 NaN)不一致的卫星图像被平均为 bi-monthly 值(两个月一起平均)。数据的格式类似于示例数据框“df”。实际时间序列数据从 1985-2020 延伸,底部的屏幕截图显示了它的实际格式以供参考。
df = pd.DataFrame({'grouping': ['F-M', 'A-M', 'J-J', 'A-S', 'O-N', 'D-J', 'F-M', 'A-M', 'J-J', 'A-S', 'O-N', 'D-J'],
'year': ['1985', '1985','1985','1985','1985','1985', '1986','1986','1986','1986','1986','1986'],
'region_1': ['NaN', 0.264, 0.339, 0.321, 0.305, 'NaN', 'NaN', 0.404, 0.206, 0.217, 0.266, 0.217 ],
'region_2': ['NaN', 0.457, 0.649, 0.625, 0.531, 'NaN', 0.503, 0.656, 0.437, 0.568, 0.547, 'NaN' ]})
我需要重新格式化数据,使每一行只有一年,每两个月分组为一列 header。但是,每个数据集都有两个区域需要相互比较。 “April-May 区域 1”和“April-May 区域 2”。最终数据集看起来像这样:
df2 = pd.DataFrame({'year':['1985', '1986'],
'F-M reg_1': ['NaN', 'NaN'],
'A-M reg_1': [0.264, 0.404],
'J-J reg_1': [0.339, 0.206],
'A-S reg_1': [0.321, 0.217],
'O-N reg_1': [0.305, 0.266],
'D-J reg_1': ['NaN', 0.217],
'F-M reg_2': ['NaN', 0.503],
'A-M reg_2': [0.457, 0.656],
'J-J reg_2': [0.649, 0.437],
'A-S reg_2': [0.635, 0.568],
'O-N reg_2': [0.531, 0.547],
'D-J reg_2': ['NaN', 'NaN']})
我试过使用以下代码,但我不知道如何在数据框中包含 region_2 数据。它还创建一个索引值并将其称为“分组”并打乱 bi-monthly 分组的顺序。
df.pivot(index='year', columns = 'grouping', values = ('region_1')).reset_index()
为每个区域创建两个单独的数据框会更好吗?
我似乎也找不到任何说明如何执行此操作的帖子。
我认为您需要做的就是为 values
参数使用一个列表:
bimonths = ['F-M', 'A-M', 'J-J', 'A-S', 'O-N', 'D-J']
df.pivot(index='year', columns = 'grouping', values = ['region_1','region_2']).reindex(bimonths, axis=1, level=1)
输出(列对齐被剪切和粘贴弄乱了):
region_1 region_2
grouping F-M A-M J-J A-S O-N D-J F-M A-M J-J A-S O-N D-J
year
1985 NaN 0.264 0.339 0.321 0.305 NaN NaN 0.457 0.649 0.625 0.531 NaN
1986 NaN 0.404 0.206 0.217 0.266 0.217 0.503 0.656 0.437 0.568 0.547 NaN
我对 python 比较陌生,一直在使用 Pandas 来处理科学数据。我有 79 个 CSV 格式的数据集,这些数据集的像素值(很多 NaN)不一致的卫星图像被平均为 bi-monthly 值(两个月一起平均)。数据的格式类似于示例数据框“df”。实际时间序列数据从 1985-2020 延伸,底部的屏幕截图显示了它的实际格式以供参考。
df = pd.DataFrame({'grouping': ['F-M', 'A-M', 'J-J', 'A-S', 'O-N', 'D-J', 'F-M', 'A-M', 'J-J', 'A-S', 'O-N', 'D-J'],
'year': ['1985', '1985','1985','1985','1985','1985', '1986','1986','1986','1986','1986','1986'],
'region_1': ['NaN', 0.264, 0.339, 0.321, 0.305, 'NaN', 'NaN', 0.404, 0.206, 0.217, 0.266, 0.217 ],
'region_2': ['NaN', 0.457, 0.649, 0.625, 0.531, 'NaN', 0.503, 0.656, 0.437, 0.568, 0.547, 'NaN' ]})
我需要重新格式化数据,使每一行只有一年,每两个月分组为一列 header。但是,每个数据集都有两个区域需要相互比较。 “April-May 区域 1”和“April-May 区域 2”。最终数据集看起来像这样:
df2 = pd.DataFrame({'year':['1985', '1986'],
'F-M reg_1': ['NaN', 'NaN'],
'A-M reg_1': [0.264, 0.404],
'J-J reg_1': [0.339, 0.206],
'A-S reg_1': [0.321, 0.217],
'O-N reg_1': [0.305, 0.266],
'D-J reg_1': ['NaN', 0.217],
'F-M reg_2': ['NaN', 0.503],
'A-M reg_2': [0.457, 0.656],
'J-J reg_2': [0.649, 0.437],
'A-S reg_2': [0.635, 0.568],
'O-N reg_2': [0.531, 0.547],
'D-J reg_2': ['NaN', 'NaN']})
我试过使用以下代码,但我不知道如何在数据框中包含 region_2 数据。它还创建一个索引值并将其称为“分组”并打乱 bi-monthly 分组的顺序。
df.pivot(index='year', columns = 'grouping', values = ('region_1')).reset_index()
为每个区域创建两个单独的数据框会更好吗?
我似乎也找不到任何说明如何执行此操作的帖子。
我认为您需要做的就是为 values
参数使用一个列表:
bimonths = ['F-M', 'A-M', 'J-J', 'A-S', 'O-N', 'D-J']
df.pivot(index='year', columns = 'grouping', values = ['region_1','region_2']).reindex(bimonths, axis=1, level=1)
输出(列对齐被剪切和粘贴弄乱了):
region_1 region_2
grouping F-M A-M J-J A-S O-N D-J F-M A-M J-J A-S O-N D-J
year
1985 NaN 0.264 0.339 0.321 0.305 NaN NaN 0.457 0.649 0.625 0.531 NaN
1986 NaN 0.404 0.206 0.217 0.266 0.217 0.503 0.656 0.437 0.568 0.547 NaN