我有以下来自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
我希望 Dataframe 由“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列中的每个唯一值在右侧都有自己的列集,但与其余数据共享同一日期。
我该怎么做呢?我必须要解卷、融化、交叉表或其他什么吗?我不知道该使用什么函数,甚至不知道从哪里开始解决这个问题。
有什么想法吗?
我知道还有很长的路要走,
首先,我过滤 Dataframe 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')
是否有一个更短更有效的功能来执行此操作?
1条答案
按热度按时间lf5gs5x21#
你描述说,有些事情模棱两可
wban
要用作枢轴的值,但在提供的数据集中,包含“486990”和“486980”的列是stn
. 剩下的,我会考虑你想通过stn
. 如果不是这样,请更正您的问题。你可以用
pandas.DataFrame.pivot
,指定除stn
及wban
作为价值观。然后重新加工MultiIndex
通过连接名称,将其作为单个索引。最后,使用dropna
删除数据不完整的行(可选)输出: