Ric*_*kyj 2 python dataframe melt pandas
我有一个熊猫数据框,每个对象有一行。在该对象中,有子对象。我想创建一个数据框,每个子对象包含一行。
我已经阅读了一些融会贯通的内容,但无法开始弄清楚如何将其用于我想做的事情。
我想从
ObjectID Sub1_ID Sub1_Var1 Sub1_Var2 Sub1_Var3 Sub2_ID Sub2_Var1 Sub2_Var2 Sub2_Var3
1 98398 3 10 9 19231 6 7 5
2 87868 8 5 4
3 4579 5 6 6 24833 6 2 2
4 2514 1 6 9
Run Code Online (Sandbox Code Playgroud)
至
ObjectID Sub_ID Var1 Var2 Var3
1 98398 3 10 9
1 19231 6 7 5
2 87868 8 5 4
3 4579 5 6 6
3 24833 6 2 2
4 2514 1 6 9
Run Code Online (Sandbox Code Playgroud)
做到这一点的一种方法是将MultiIndex与配合使用from_arrays,然后用于stack调整数据框的形状:
df1 = df.set_index('ObjectID')
df1.columns = pd.MultiIndex.from_arrays(zip(*df1.columns.str.split('_')))
df1.stack(0).reset_index().drop('level_1', axis=1)
Run Code Online (Sandbox Code Playgroud)
输出:
ObjectID ID Var1 Var2 Var3
0 1 98398.0 3.0 10.0 9.0
1 1 19231.0 6.0 7.0 5.0
2 2 87868.0 8.0 5.0 4.0
3 3 4579.0 5.0 6.0 6.0
4 3 24833.0 6.0 2.0 2.0
5 4 2514.0 1.0 6.0 9.0
Run Code Online (Sandbox Code Playgroud)