【发布时间】:2022-11-16 01:17:45
【问题描述】:
我有一些在不同时间点以宽格式获取的数据,需要将其转换为长格式以帮助分析并将其与另一个数据集合并。
数据格式为(其中 A_0 表示 A 在时间 0 的值,A_15 表示时间 15 的值):
import pandas as pd
df_wide = pd.DataFrame({'Subject': ['AA', 'BB', 'CC', 'DD'],
'A_0': [1, 2, 3, 4],
'A_15': [2, 3, 4, 5],
'A_30': [3, 4, 5, 6],
'B_0': [1, 2, 3, 4],
'B_15': [2, 3, 4, 5],
'B_30': [3, 4, 5, 6],
'C_0': [1, 2, 3, 4],
'C_15': [2, 3, 4, 5],
'C_30': [3, 4, 5, 6]
}
)
df_wide
Subject A_0 A_15 A_30 B_0 B_15 B_30 C_0 C_15 C_30
0 AA 1 2 3 1 2 3 1 2 3
1 BB 2 3 4 2 3 4 2 3 4
2 CC 3 4 5 3 4 5 3 4 5
3 DD 4 5 6 4 5 6 4 5 6
我希望将其转换为长格式并生成变量时间如下:
df_long = pd.DataFrame({'Subject': ['AA', 'AA', 'AA', 'BB', 'BB', 'BB', 'CC', 'CC', 'CC', 'DD', 'DD', 'DD'],
'Time': [0, 15, 30, 0, 15, 30, 0, 15, 30, 0, 15, 30],
'A': [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6],
'B': [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6],
'C': [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6],
})
df_long
Subject Time A B C
0 AA 0 1 1 1
1 AA 15 2 2 2
2 AA 30 3 3 3
3 BB 0 2 2 2
4 BB 15 3 3 3
5 BB 30 4 4 4
6 CC 0 3 3 3
7 CC 15 4 4 4
8 CC 30 5 5 5
9 DD 0 4 4 4
10 DD 15 5 5 5
11 DD 30 6 6 6
我已经阅读了 pivot 和 melt 函数,但无法完全理解它 - 任何帮助将不胜感激。
厌倦了 pivot 和 melt 但不确定如何生成时间变量。
【问题讨论】: