我有类似
的数据data = {
"Person": ["A", "A", "A", "B", "B", "B"],
"Month": [1, 2, 3, 1, 2, 3],
"Value 1": [5, 6, 7, 8, 9, 10],
"Value 2": [10, 11, 12, 13, 5, 4]
}
df = pd.DataFrame(data)
我希望它看起来像:
Person Value Month 1 Month 2 Month 3
0 A 1 5 6 7
0 A 2 10 11 12
0 B 1 8 9 10
0 B 2 13 5 4
...
我该怎么做?
答案 0 :(得分:1)
IIUC,可以pivot_table
+ unstack
df.pivot_table(columns='Month', index='Person')\
.unstack()\
.reset_index()\
.rename(columns={'level_0': 'Value'})\
.pivot_table(columns='Month', index=['Person', 'Value'])
输出
Month 1 2 3 5 6
Person Value
A Value 1 5.0 6.0 7.0 NaN NaN
Value 2 10.0 11.0 12.0 NaN NaN
B Value 1 NaN NaN NaN 8.5 10.0
Value 2 NaN NaN NaN 9.0 4.0
答案 1 :(得分:0)
另一个使用melt
df1=df.melt(['Person','Month'])\
.pivot_table(index=['Person','variable'], columns=['Month'])
df1.index.rename(['Person','Value'], inplace=True)
df1.columns=df1.columns.droplevel()
Month 1 2 3 5 6
Person Value
A Value 1 5.0 6.0 7.0 NaN NaN
Value 2 10.0 11.0 12.0 NaN NaN
B Value 1 NaN NaN NaN 8.5 10.0
Value 2 NaN NaN NaN 9.0 4.0