我在pandas中有一个如下所示的数据框:
ID TIME A B C
1 ddmmyy value_of_A1 value_of_B1 value_of_C1
2 ddmmyy value_of_A2 value_of_B2 value_of_C2
3 ddmmyy value_of_A3 value_of_B3 value_of_C3
我希望将其变成一个如下所示的数据框:
ID TIME TYPE VALUE
1 ddmmyy A value_of_A1
1 ddmmyy B value_of_B1
1 ddmmyy C value_of_C1
2 ddmmyy A value_of_A2
2 ddmmyy B value_of_B2
2 ddmmyy C value_of_C2
3 ddmmyy A value_of_A3
3 ddmmyy B value_of_B3
3 ddmmyy C value_of_C3
我怎么能用pandas和python来做呢?
谢谢你的帮助
答案 0 :(得分:4)
df = pd.melt(df, id_vars=['ID','TIME'], var_name='TYPE', value_name='VALUE')
.sort_values(['ID','TYPE'])
print (df)
ID TIME TYPE VALUE
0 1 ddmmyy A value_of_A1
3 1 ddmmyy B value_of_B1
6 1 ddmmyy C value_of_C1
1 2 ddmmyy A value_of_A2
4 2 ddmmyy B value_of_B2
7 2 ddmmyy C value_of_C2
2 3 ddmmyy A value_of_A3
5 3 ddmmyy B value_of_B3
8 3 ddmmyy C value_of_C3
替代:
df = df.rename_axis(['TYPE'], axis=1)
.set_index(['ID','TIME'])
.stack()
.reset_index(name='VALUE')
print (df)
ID TIME TYPE VALUE
0 1 ddmmyy A value_of_A1
1 1 ddmmyy B value_of_B1
2 1 ddmmyy C value_of_C1
3 2 ddmmyy A value_of_A2
4 2 ddmmyy B value_of_B2
5 2 ddmmyy C value_of_C2
6 3 ddmmyy A value_of_A3
7 3 ddmmyy B value_of_B3
8 3 ddmmyy C value_of_C3
答案 1 :(得分:2)
df.set_index(['ID','TIME']).stack().reset_index().rename(columns={'level_2':'TYPE',0:'VALUE'})
输出:
ID TIME TYPE VALUE
0 1 ddmmyy A value_of_A1
1 1 ddmmyy B value_of_B1
2 1 ddmmyy C value_of_C1
3 2 ddmmyy A value_of_A2
4 2 ddmmyy B value_of_B2
5 2 ddmmyy C value_of_C2
6 3 ddmmyy A value_of_A3
7 3 ddmmyy B value_of_B3
8 3 ddmmyy C value_of_C3