【问题标题】:Python unstack value error: Index contains duplicate entries, cannot reshapePython unstack value 错误:索引包含重复条目,无法重塑
【发布时间】:2021-12-22 10:11:22
【问题描述】:

我正在尝试解开 df:

Site   Month   Class   Data
A      11      Bike    20
A      11      Car     200
A      12      Bike    30
A      12      Car     300
B      11      Bike    40
B      11      Car     400
B      12      Bike    50
B      12      Car     500

下面是我想要的数据框:

Site   Month   Bike   Car   
A      11      20     200
A      12      30     300
B      11      40     400
B      12      50     500

当我尝试 df.set_index(['Site','Month']).unstack() 时,它报告“ValueError:索引包含重复的条目,无法重塑”,因为在 df 中设置索引后,第一行和第二行会具有相同的索引 A/11。

还有其他方法可以得到想要的结果吗?你可以使用下面的代码来生成df:

df = pd.DataFrame({
    'Site': {0: 'A', 1: 'A', 2: 'A', 3: 'A', 4:'B', 5:'B', 6:'B', 7:'B'},
    'Month': {0: 11, 1: 11, 2: 12, 3: 12, 4:11, 5:11, 6:12, 7:12},
    'Class': {0: 'Bike', 1: 'Car', 2: 'Bike', 3: 'Car', 4: 'Bike', 5: 'Car', 6: 'Bike', 7: 'Car',},
    'Data': {0: 20, 1: 200, 2: 30, 3: 300, 4:40, 5:400, 6:50, 7:500}})

【问题讨论】:

    标签: python pandas dataframe stack pivot


    【解决方案1】:

    另一种选择是使用Dataframe.pivot 方法,例如

    pvt = df.pivot(index=['Site','Month'], columns="Class", values="Data")
    print(pvt)
    
    Class       Bike  Car
    Site Month           
    A    11       20  200
         12       30  300
    B    11       40  400
         12       50  500
    

    columns 参数(Class)的参数值明显地被转换为新的列名。

    PS。如果需要在其他时间使用,可以将 df.pivot 替换为 df.pivot_table,它还具有更丰富的参数集,例如 aggfunc

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 2018-02-09
      相关资源
      最近更新 更多