我有一个结构相同的大数据框,如下所示:
"date" "key0" "key1" "key2" "key3" "key4" ...
2010 val0 val1 val2 val3 val4 ...
2011 val5 val6 val7 val8 val9 ...
.... .... .... .... .... ....
我想要实现的是获取每个日期键值组并创建一个新的数据框:
"date" "key" "val"
2010 key0 val0
2010 key1 val1
2010 key2 val2
2010 key3 val3
2010 key4 val4
2011 key0 val5
2011 key1 val6
2011 key2 val7
2011 key3 val8
2011 key4 val9
.... .... ....
除了手动使用 for 循环之外,还有其他方法可以获得这种数据帧吗?
答案 0 :(得分:1)
主要是使用@NickODell建议的stack
来完成转换:
>>> df.set_index('date') \
.rename_axis(columns='key') \
.stack() \
.rename('val') \
.reset_index()
date key val
0 2010 key0 val0
1 2010 key1 val1
2 2010 key2 val2
3 2010 key3 val3
4 2010 key4 val4
5 2011 key0 val5
6 2011 key1 val6
7 2011 key2 val7
8 2011 key3 val8
9 2011 key4 val9
答案 1 :(得分:1)
您可以按如下方式使用 .melt()
:
(df.melt('date', var_name='key', value_name='val')
.sort_values('date')
).reset_index(drop=True)
结果:
date key val
0 2010 key0 val0
1 2010 key1 val1
2 2010 key2 val2
3 2010 key3 val3
4 2010 key4 val4
5 2011 key0 val5
6 2011 key1 val6
7 2011 key2 val7
8 2011 key3 val8
9 2011 key4 val9