gpt4 book ai didi

python - Pandas, Python : rotate some (31-day) columns of a dataframe and match them to the existing (year, 月)行(NOAA 数据)

转载 作者:行者123 更新时间:2023-11-28 17:15:18 26 4
gpt4 key购买 nike

我有 NOAA 天气数据。在它的原始状态下,它以年和月作为行,然后以天作为列。我想扩展行数,以便每一行都有年、月和日,每行中都有适当的数据。

还有一个天气变量列,其中每一行代表每个月收集的不同天气变量。一个月内收集的天气变量的数量可能会发生变化。 (一月有两个(tmax,tmin),二月有三个(tmax,tmin,prcp),三月有一个(tmin)。)

这是一个 df 的例子。

example_df = pd.DataFrame({'station': ['USC1', 'USC1', 'USC1', 'USC1', 'USC1', 'USC1'],
'year': [1993, 1993, 1993, 1993,1993, 1993],
'month': [1, 1, 2, 2, 2, 3],
'attribute':['tmax', 'tmin', 'tmax', 'tmin', 'prcp', 'tmax'],
'day1': range(1, 7, 1),
'day2': range(1, 7, 1),
'day3': range(1, 7, 1),
'day4': range(1, 7, 1),
})
example_df = example_df[['station', 'year', 'month', 'attribute', 'day1', 'day2', 'day3', 'day4']]

这就是我想要的解决方案,

solution_df = pd.DataFrame({'station': ['USC1', 'USC1', 'USC1', 'USC1', 'USC1', 'USC1','USC1', 'USC1', 'USC1', 'USC1', 'USC1', 'USC1'],
'year': [1993, 1993, 1993, 1993,1993, 1993, 1993, 1993, 1993, 1993,1993, 1993],
'month': [1, 1,1, 1, 2, 2, 2, 2, 3, 3, 3, 3],
'day':[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],
'tmax': [1, 1, 1, 1, 3, 3, 3, 3, 6, 6, 6, 6],
'tmin': [2, 2, 2, 2, 4, 4, 4, 4, np.nan, np.nan, np.nan, np.nan],
'prcp': [np.nan, np.nan, np.nan, np.nan, 5, 5, 5, 5, np.nan, np.nan, np.nan, np.nan]

})
solution_df = solution_df[['station', 'year', 'month', 'day', 'tmax', 'tmin', 'prcp']]

我已经尝试过 .T、pivot、melt、stack 和 unstack 以使日期列成为具有正确月份的行。

这与我在示例数据集上取得的成功差不多。

record_arr = example_df.to_records()

new_df = pd.DataFrame({'station': np.nan,
'year': np.nan,
'month':np.nan,
'day': np.nan,
'tmax':np.nan,
'tmin': np.nan,
'prcp':np.nan},
index = [1]
)
new_df.append ({'station': record_arr[0][1], 'year': record_arr[0][2], 'month':record_arr[0][3], 'tmax':record_arr[0][5], 'tmin':record_arr[1][5] }, ignore_index = True)

最佳答案

这需要旋转和熔化(或展开和堆叠)。这是我分两步得到的

df1 = example_df.set_index(['station', 'year', 'month', 'attribute']).stack().reset_index()
df1.set_index(['station', 'year', 'month', 'level_4','attribute'])[0].unstack().reset_index()


attribute station year month level_4 prcp tmax tmin
0 USC1 1993 1 day1 NaN 1.0 2.0
1 USC1 1993 1 day2 NaN 1.0 2.0
2 USC1 1993 1 day3 NaN 1.0 2.0
3 USC1 1993 1 day4 NaN 1.0 2.0
4 USC1 1993 2 day1 5.0 3.0 4.0
5 USC1 1993 2 day2 5.0 3.0 4.0
6 USC1 1993 2 day3 5.0 3.0 4.0
7 USC1 1993 2 day4 5.0 3.0 4.0
8 USC1 1993 3 day1 NaN 6.0 NaN
9 USC1 1993 3 day2 NaN 6.0 NaN
10 USC1 1993 3 day3 NaN 6.0 NaN
11 USC1 1993 3 day4 NaN 6.0 NaN

关于python - Pandas, Python : rotate some (31-day) columns of a dataframe and match them to the existing (year, 月)行(NOAA 数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44611622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com