将一行pandas数据帧转换为多行

时间:2013-11-19 05:04:43

标签: python python-2.7 pandas

我想转此:

   age  id  val
0   99   1  0.3
1   99   2  0.5
2   99   3  0.1

进入这个:

   age  id  val
0   25   1  0.3
1   50   1  0.3
2   75   1  0.3
3   25   2  0.5
4   50   2  0.5
5   75   2  0.5
6   25   3  0.1
7   50   3  0.1
8   75   3  0.1

上下文:我存储的数据包含一个为所有年龄(年龄= 99)编码的值。但是,我正在开发的应用程序需要为每个id-age对明确声明的值(id = 1,age = 25,50和75)。有一些简单的解决方案:迭代id并附加一堆数据帧,但我正在寻找优雅的东西。我想做很多:从原始数据框合并到包含所有年龄的模板,但我仍然需要循环id以创建模板。

1 个答案:

答案 0 :(得分:1)

不知道,可能有更优雅的方法,但你可以做一些像交叉加入(或cartesian product):

>>> df = pd.DataFrame({'age':[99,99,99],'id':[1,2,3],'val':[0.3,0.5,0.1]})
>>> df
   age  id  val
0   99   1  0.3
1   99   2  0.5
2   99   3  0.1
>>> df2 = pd.DataFrame({'age':[99,99,99],'new_age':[25,50,75]})
>>> df2 = pd.merge(df, df2, on='age')
>>> del df2['age']
>>> df2 = df2.rename(columns={'new_age':'age'})
>>> df2
   id  val      age
0   1  0.3       25
1   1  0.3       50
2   1  0.3       75
3   2  0.5       25
4   2  0.5       50
5   2  0.5       75
6   3  0.1       25
7   3  0.1       50
8   3  0.1       75