1 回答
TA贡献1783条经验 获得超4个赞
您可以使用melt和pivot_table
# setup the initial dataframe
dates = np.repeat(pd.date_range(start='1/1/2018', end='1/03/2018'), 3)
stations = np.tile(['O', 'E', 'L',], 3)
vals = np.random.rand(len(dates),len(cols))
df = pd.DataFrame(vals)
df.insert(0, 'Date', dates)
df.insert(1, 'Station', stations)
融化数据框
melted = df.melt(id_vars=['Date', 'Station'], value_vars=df.columns[2:])
现在数据看起来像这样
Date Station variable value
0 2018-01-01 O 0 0.340432
1 2018-01-01 E 0 0.865012
2 2018-01-01 L 0 0.994935
3 2018-01-02 O 0 0.274560
4 2018-01-02 E 0 0.096046
接下来,您需要从日期和变量创建新的日期列(前列 0-23)
melted['Date2'] = melted['Date'] + pd.to_timedelta(melted['variable'].astype(int), unit='hours')
最后,创建一个以站点为列的数据透视表
melted.pivot_table(index='Date2', columns='Station', values='value')
现在数据看起来像这样
Station E L O
Date2
2018-01-01 00:00:00 0.865012 0.994935 0.340432
2018-01-01 01:00:00 0.167927 0.605892 0.271139
2018-01-01 02:00:00 0.314101 0.473481 0.036693
2018-01-01 03:00:00 0.060521 0.462390 0.073077
2018-01-01 04:00:00 0.799032 0.420461 0.52114
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报