Pandas Transform и добавьте вторую строку между измерениями - PullRequest
1 голос
/ 23 октября 2019

Я борюсь с трансформацией фрейма данных панд.

df=
0               A     --    cm
1               B     --   cm2
2               C     69  cm/s
3               D     48  cm/s
4               E    152    ms
5               F   1.05   NaN
6               G   9.15   NaN
7               H     --    ms
8               I      8  cm/s
9               J     12  cm/s

Я хочу преобразовать его в:

> A   A_Unit  B    B_Unit  C   C_Unit ...
> --  cm      --   cm2     69  cm/s   ...

Параметр от A до J

Преобразование в фрейм данных только с числами работает очень хорошо с df.T.drop (0), но я на самом деле понятия не имею, как добавить метку единиц, значения которых рядом со столбцами параметров.

Может быть, у кого-то есть хорошая идея и она может помочь мне с этой темой.

Спасибо

Томас

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

IIUC:

df = pd.read_clipboard(sep='\s\s+', header=None)

df_out = df.set_index(1).drop(0, axis=1).rename(columns={2:'',3:'Unit'}).stack()
df_out = df_out.to_frame().T
df_out.columns = [f'{i}_{j}' if j else f'{i}' for i, j in df_out.columns]
df_out

Выход:

    A A_Unit   B B_Unit   C C_Unit   D D_Unit    E E_Unit     F     G   H  \
0  --     cm  --    cm2  69   cm/s  48   cm/s  152     ms  1.05  9.15  --   

  H_Unit  I I_Unit   J J_Unit  
0     ms  8   cm/s  12   cm/s  
2 голосов
/ 23 октября 2019

Вы можете сложить и транспонировать, так как у вас всегда будет группировка по два.


u = df.set_index(0).stack().to_frame().T

u.columns = [
  x if y == 1 else f'{x}_Unit' for x, y in u.columns]

    A A_Unit   B B_Unit   C C_Unit   D D_Unit    E E_Unit     F     G   H H_Unit  I I_Unit   J J_Unit
0  --     cm  --    cm2  69   cm/s  48   cm/s  152     ms  1.05  9.15  --     ms  8   cm/s  12   cm/s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...