【问题标题】:Reshape (grouping or pivoting) pandas dataframe by converting a row into a column通过将行转换为列来重塑(分组或旋转)熊猫数据框
【发布时间】:2019-12-05 06:26:38
【问题描述】:

我想用这个形状重塑一个数据框

Country     subject    2017 2018    Frq  2017 Score     2018 Score
Argentina   subject 1   12   22     100  50.77214238    51.54316539
Argentina   subject 2   68   13     150  66.92805676    67.60645268

到这个形状

         subject  1                     subject  2                          subject  3…
Country 2017    2018    Frq 2017 Score  2018 Score  2017    2018    Frq 2017 Score  2018 Score  
Argentina   12  22  100 50.77214238 51.54316539 12  22  100 50.77214238 51.54316539 
Australia   68  13  150 66.92805676 67.60645268 68  13  150 66.92805676 67.60645268 

所以每个国家都有一排。并将列主题的值转换为列

我尝试了以下方法,但没有产生所需的结果

pd.pivot_table(GCI, index='Country', columns=['subject'],
               values=['2017', '2018'], aggfunc='sum', fill_value=0) 

也试过了:

pivoted_GCI = GCI[['Country']]  #pd.DataFrame()

for key,group_df in GCI.groupby('subject'):
    print("the group for '{}' has {} rows".format(key,len(group_df))) 
    group_df.name = key
    group_df = group_df.drop(['subject'], axis=1)
    display(group_df)
    pivoted_GCI = pd.merge(pivoted_GCI, group_df, on='Country', how='left')

谢谢

【问题讨论】:

    标签: pandas pivot-table pandas-groupby


    【解决方案1】:

    你可以做unstack

    s=df.set_index(['Country','subject']).stack().unstack([1,2]).reset_index()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2017-04-26
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      相关资源
      最近更新 更多