Я хочу изменить панду DataFrame из двух столбцов в одну строку:

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
1
Redge 25 Фев 2018 в 22:54

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

Или set_index с транспонированием 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
0
jezrael 25 Фев 2018 в 20:02

Мы можем исправить ваш df_b

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
0
YOBEN_S 25 Фев 2018 в 20:04

По-другому:

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
0
YOLO 25 Фев 2018 в 19:58