Pandas:将两列重塑为打开

2024-05-17 19:13:43 发布

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

我想将一个数据帧从两列重塑为一行:

import numpy as np
import pandas as pd
df_a = pd.DataFrame({ 'Type': ['A', 'B', 'C', 'D', 'E'], 'Values':[2,4,7,9,3]})
df_a

   Type Values
0   A   2
1   B   4
2   C   7
3   D   9
4   E   3

df_b = df_a.pivot(columns='Type', values='Values')
df_b

这让我想到:

Type A       B       C       D      E
0   2.0     NaN     NaN     NaN     NaN
1   NaN     4.0     NaN     NaN     NaN
2   NaN     NaN     7.0     NaN     NaN
3   NaN     NaN     NaN     9.0     NaN
4   NaN     NaN     NaN     NaN     3.0

当我想把它浓缩成这样一行:

Type A       B       C       D      E
0   2.0     4.0     7.0     9.0     3.0

Tags: columns数据importnumpydataframepandasdfas
3条回答

我们可以修理你的行李

df_b.ffill().iloc[[-1],:]
Out[360]: 
Type    A    B    C    D    E
4     2.0  4.0  7.0  9.0  3.0

或者我们做

df_a.assign(key=[0]*len(df_a)).pivot(columns='Type', values='Values',index='key')
Out[366]: 
Type  A  B  C  D  E
key                
0     2  4  7  9  3

我相信您不需要pivot,更好的方法是只使用DataFrame构造函数:

df_b = pd.DataFrame([df_a['Values'].values], columns=df_a['Type'].values)
print (df_b)
   A  B  C  D  E
0  2  4  7  9  3

^{}通过T转置:

df_b = df_a.set_index('Type').T.rename({'Values':0})
print (df_b)
Type  A  B  C  D  E
0     2  4  7  9  3

另一种方式:

df_a['col'] = 0
df_a.set_index(['col','Type'])['Values'].unstack().reset_index().drop('col', axis=1)

Type    A   B   C   D   E
  0     2   4   7   9   3

相关问题 更多 >