从现有数据帧创建新数据帧

时间:2021-06-24 20:01:31

标签: pandas dataframe python-2.7

我有一个结构相同的大数据框,如下所示:

"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 循环之外,还有其他方法可以获得这种数据帧吗?

2 个答案:

答案 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