Pandas:将列打包成行

2024-09-30 18:13:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在读pd.stackpd.unstackpd.pivot,但我不能把我想做的事放在心上

给定如下数据帧

   id1 id2  id3  vals  vals1
0    1   a   -1    10     20
1    1   a   -2    11     21
2    1   a   -3    12     22
3    1   a   -4    13     23
4    1   b   -1    14     24
5    1   b   -2    15     25
6    1   b   -3    16     26
7    1   b   -4    17     27

我想得到以下结果

   id1 id2  -1_vals  -2_vals  ...  -1_vals1  -2_vals1  -3_vals1  -4_vals1
0    1   a       10       11  ...        20        21        22        23
1    1   b       14       15  ...        24        25        26        27

它有点像一个带轴心的groupby,列id3被分散成行,其中新的列名是原始列和id3值的相应串联

编辑:可以保证perid1+id2id3是唯一的,但是一些组的id1+id2将具有不同的id3-在这种情况下,可以将NaN放在那里


Tags: 数据编辑stackpdpivotid3id2groupby
1条回答
网友
1楼 · 发布于 2024-09-30 18:13:24

^{}^{}以及^{}表示列中的MultiIndex,然后用f-string的列表理解将其展平:

df1 = (df.set_index(['id1','id2','id3'])
         .unstack()
         .sort_index(level=[0,1], ascending=[True, False], axis=1))

#python 3.6+
df1.columns = [f'{b}_{a}' for a, b in df1.columns]
#python below
#df1.columns = ['{}_{}'.format(a, b) for a, b in df1.columns]
df1 = df1.reset_index()
print (df1)
   id1 id2  -1_vals  -2_vals  -3_vals  -4_vals  -1_vals1  -2_vals1  -3_vals1  \
0    1   a       10       11       12       13        20        21        22   
1    1   b       14       15       16       17        24        25        26   

   -4_vals1  
0        23  
1        27  

相关问题 更多 >