pandas 转置和重新排序

uqdfh47h  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(119)

这是我的df的一个样本,由每个城市的温度和降雨量(毫米)组成:
| 日期时间|柏林_温度|都柏林_温度|伦敦_温度|巴黎_温度|柏林--雨|都柏林--雨|伦敦--雨|巴黎--雨|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 2022年1月1日10时00分|二十四|二十四|二十四|二十四|十个|十个|十个|十个|
| 2022年1月1日11时00分|二十四|二十四|二十四|二十四|十个|十个|十个|十个|
| 2022年1月1日12时00分|二十四|二十四|二十四|二十四|十个|十个|十个|十个|
| 2022年1月1日13时00分|二十四|二十四|二十四|二十四|十个|十个|十个|十个|
我想实现以下输出作为 Dataframe :
| 日期时间|城市|温度|降雨量|
| - ------| - ------| - ------| - ------|
| 2022年1月1日10时00分|柏林|二十四|十个|
| 2022年1月1日10时00分|都柏林|二十四|十个|
| 2022年1月1日10时00分|伦敦|二十四|十个|
| 2022年1月1日10时00分|巴黎|二十四|十个|
| 2022年1月1日11时00分|柏林|二十四|十个|
| 2022年1月1日11时00分|都柏林|二十四|十个|
| 2022年1月1日11时00分|伦敦|二十四|十个|
| 2022年1月1日11时00分|巴黎|二十四|十个|
| 2022年1月1日12时00分|...|...|...|
目前我不知道如何通过移调或类似的方法来达到这个目的,这怎么可能呢?

o8x7eapl

o8x7eapl1#

DataFrame.stackMultiIndex一起使用,MultiIndex是通过使用_拆分列创建的,但首先将Datetime转换为按DataFrame.set_index索引:

df1 = df.set_index('Datetime')
df1.columns = df1.columns.str.split('_', expand=True)
df1 = df1.stack(0).rename_axis(['Datetime','City']).reset_index()
print (df1)
               Datetime    City  rain  temperature
0   2022-01-01 10:00:00  Berlin    10           24
1   2022-01-01 10:00:00  Dublin    10           24
2   2022-01-01 10:00:00  London    10           24
3   2022-01-01 10:00:00   Paris    10           24
4   2022-01-01 11:00:00  Berlin    10           24
5   2022-01-01 11:00:00  Dublin    10           24
6   2022-01-01 11:00:00  London    10           24
7   2022-01-01 11:00:00   Paris    10           24
8   2022-01-01 12:00:00  Berlin    10           24
9   2022-01-01 12:00:00  Dublin    10           24
10  2022-01-01 12:00:00  London    10           24
11  2022-01-01 12:00:00   Paris    10           24
12  2022-01-01 13:00:00  Berlin    10           24
13  2022-01-01 13:00:00  Dublin    10           24
14  2022-01-01 13:00:00  London    10           24
15  2022-01-01 13:00:00   Paris    10           24
sdnqo3pr

sdnqo3pr2#

使用janitor.pivot_longer

import janitor

out = df.pivot_longer(index='Datetime', names_to=('City', '.value'),
                      names_sep='_', sort_by_appearance=True)

输出:

Datetime    City  temperature  rain
0   2022-01-01 10:00:00  Berlin           24    10
1   2022-01-01 10:00:00  Dublin           24    10
2   2022-01-01 10:00:00  London           24    10
3   2022-01-01 10:00:00   Paris           24    10
4   2022-01-01 11:00:00  Berlin           24    10
5   2022-01-01 11:00:00  Dublin           24    10
6   2022-01-01 11:00:00  London           24    10
7   2022-01-01 11:00:00   Paris           24    10
8   2022-01-01 12:00:00  Berlin           24    10
9   2022-01-01 12:00:00  Dublin           24    10
10  2022-01-01 12:00:00  London           24    10
11  2022-01-01 12:00:00   Paris           24    10
12  2022-01-01 13:00:00  Berlin           24    10
13  2022-01-01 13:00:00  Dublin           24    10
14  2022-01-01 13:00:00  London           24    10
15  2022-01-01 13:00:00   Paris           24    10

相关问题