Преобразование кадра данных (транспонирование) - PullRequest
0 голосов
/ 08 мая 2018

У меня есть датафрейм, который выглядит так:

df=pd.DataFrame(columns=["AC_YEAR","Physics"],data=[[2010,8],[2010,9],[2011,7],[2010,3],[2011,4]])

И я хочу преобразовать это в:

df2=pd.DataFrame(columns=[2010,2011],data=[[8,7],[9,4],[3,]])

Некоторые из опций, которые я пробовал (без удачи):

df2 = pd.DataFrame(columns=[])
for year in [2010,2011]:
    pd.concat([df2,(df[df["AC_YEAR"]==year].iloc[:,1])], axis=1, join="inner", ignore_index=True)

Любая помощь? Спасибо!

1 Ответ

0 голосов
/ 08 мая 2018

Вам необходимо создать новые значения индекса с помощью cumcount или apply и Series и *1005*, а последнее изменение - unstack:

df2 = df.set_index([df.groupby('AC_YEAR').cumcount(), 'AC_YEAR'])['Physics'].unstack()

Альтернативное решение:

df2 = df.groupby('AC_YEAR')['Physics'].apply(lambda x: pd.Series(x.values)).unstack(0)

print (df2)
AC_YEAR  2010  2011
0         8.0   7.0
1         9.0   4.0
2         3.0   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...