【发布时间】:2021-10-03 00:55:54
【问题描述】:
我有以下来自 NOAA 气象站的气象数据。
stn wban date temp count_temp dewp count_dewp slp count_slp stp count_stp visib
486990 99999 1/1/2020 82.6 24 73.9 24 9999.9 0 999.9 0 6.2
486980 99999 1/1/2020 82.4 24 74.4 24 9999.9 0 999.9 0 6.3
486990 99999 2/1/2020 82 24 74.7 24 9999.9 0 999.9 0 6.1
486980 99999 2/1/2020 82.2 24 75.1 24 9999.9 0 999.9 0 6.1
486990 99999 3/1/2020 82.1 24 75.2 24 9999.9 0 999.9 0 6.2
... ... ... ... ... ... ... ... ... ... ... ...
486990 99999 29/12/2020 79.3 24 73.5 24 9999.9 0 999.9 0 5.9
486980 99999 30/12/2020 81.8 24 74.6 24 9999.9 0 999.9 0 6.1
486990 99999 30/12/2020 81.8 24 72.7 24 9999.9 0 999.9 0 6.2
486980 99999 31/12/2020 81.1 24 75 24 9999.9 0 999.9 0 6.2
486990 99999 31/12/2020 80.4 24 72.9 24 9999.9 0 999.9 0 6.1
我希望数据框由 'wban' 列分隔
我希望它看起来像这样,
date_486990 temp_486990 count_temp_486990 dewp_486990 count_dewp_486990 slp_486990 count_slp_486990 stp_486990 count_stp_486990 visib_486990 date_486980 temp_486980 count_temp_486980 dewp_486980 count_dewp_486980 slp_486980 count_slp_486980 stp_486980 count_stp_486980 visib_486980
1/1/2020 82.6 24 73.9 24 9999.9 0 999.9 0 6.2 1/1/2020 82.4 24 74.4 24 9999.9 0 999.9 0 6.3
2/1/2020 82 24 74.7 24 9999.9 0 999.9 0 6.1 2/1/2020 82.2 24 75.1 24 9999.9 0 999.9 0 6.1
..............................
30/12/2020 81.8 24 72.7 24 9999.9 0 999.9 0 6.2 30/12/2020 81.8 24 74.6 24 9999.9 0 999.9 0 6.1
31/12/2020 80.4 24 72.9 24 9999.9 0 999.9 0 6.1 31/12/2020 81.1 24 75 24 9999.9 0 999.9 0 6.2
我知道这有点难看,但基本上我希望 wban 列中的每个唯一值在右侧都有自己的一组列,但要与其余数据共享相同的日期。
我该怎么做,我是否必须取消透视或融化或交叉表或其他东西?我不确定要使用什么功能,甚至不知道从哪里开始解决这个问题。
有什么想法吗?
我知道这条路很长,
首先我通过stn过滤数据框。
然后我运行一个 for 循环并合并日期的每一帧。
frame = df[df.stn.unique()]
for i in df.stn.unique():
temp = df[df.stn==i]
frame.merge(temp, how='left', on='date')
是否有更短更高效的 pandas 函数来执行此操作?
【问题讨论】:
标签: python pandas dataframe pivot unpivot