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

Creating a new dataframe from an existing dataframe

我有一个大数据框,其结构如下:

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

主要是按照@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

您可以按如下方式使用.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