我想转此:
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以创建模板。
答案 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