转换数据帧(转置)

时间:2018-05-08 08:48:19

标签: python pandas dataframe

我有一个如下所示的数据框:

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 :(得分:2)

您需要按cumcountapplySeries构造函数创建新的索引值,然后按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