Преобразование значений столбцов в датафреймах в новые столбцы - PullRequest
0 голосов
/ 12 июня 2018

У меня есть фрейм данных, содержащий некоторые данные, которые я хочу преобразовать, чтобы значения одного столбца определяли новые столбцы.

>>> import pandas as pd
>>> df = pd.DataFrame([['a','a','b','b'],[6,7,8,9]]).T
>>> df
   A  B
0  a  6
1  a  7
2  b  8
3  b  9

Значения столбца A должны быть столбцомимена нового информационного кадра.Результат преобразования должен выглядеть следующим образом:

   a  b
0  6  8
1  7  9

То, что я до сих пор придумал, не сработало полностью:

>>> pd.DataFrame({ k : df.loc[df['A'] == k, 'B'] for k in df['A'].unique() })
     a    b
0    6  NaN
1    7  NaN
2  NaN    8
3  NaN    9

Кроме того, что это неверно, я думаю, что, вероятно,в любом случае это более эффективный способ.Мне просто трудно понять, как обращаться с пандами.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Использование set_index, groupby, cumcount и unstack:

(df.set_index(['A', df.groupby('A').cumcount()])['B']
   .unstack(0)
   .rename_axis([None], axis=1))

Выход:

   a  b
0  6  8
1  7  9
0 голосов
/ 12 июня 2018

Использование словарного понимания с groupby:

res = pd.DataFrame({col: vals.loc[:, 1].values for col, vals in df.groupby(0)})

print(res)

   a  b
0  6  8
1  7  9
0 голосов
/ 12 июня 2018

Вы были почти там, но вам нужен .values в качестве списка массива, а затем укажите имена столбцов.

pd.DataFrame(pd.DataFrame({ k : df.loc[df['A'] == k, 'B'].values for k in df['A'].unique() }), columns=df['A'].unique())

Вывод:

    a   b
0   6   8
1   7   9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...