【问题标题】:Is is possible to apply this data-frame transform?是否可以应用此数据帧转换?
【发布时间】:2018-05-18 11:36:11
【问题描述】:

打开这个数据框:

  Name  │  car
  ──────┼────────      
  John  │  Volvo      
  John  │  Fiat      
  Paul  │  Dacia     

喜欢这个? :

  Name  │  car_1  │   car_2  
  ──────┼─────────┼─────────
  John  │  Volvo  │   Fiat    
  Paul  │  Dacia  │   NaN    

对于第一个表中任意数量的重复 ID(一个人的任意数量的汽车)ID。

【问题讨论】:

  • 你尝试了什么?
  • 不同版本的 unstack 和 pivot 将把汽车品牌放在首位(不是需要的)。

标签: pandas dataframe transform


【解决方案1】:

通过使用unstack

df1=df1.assign(numer=df1.groupby('Name').cumcount()).set_index(['Name','numer']).unstack()
df1
Out[256]: 
         car      
numer      0     1
Name              
John   Volvo  Fiat
Paul   Dacia  None

df1.columns=df1.columns.map('{0[0]}_{0[1]}'.format)
df1
Out[261]: 
       car_0  car_1
Name             
John  Volvo  Fiat
Paul  Dacia  None

【讨论】:

  • df.set_index(['Name',df.groupby('Name').cumcount()+1]).unstack()['car'].add_prefix('car_')
  • @ScottBoston 比我的好多了:-)
  • 我注意到,不要总是急于求分是有价值的。分析其他解决方案通常会导致更优化的代码。感谢您让我发表评论。
  • @ScottBoston 好点!:-) 我想我也需要放慢速度:-)
【解决方案2】:
In [190]: (df.assign(x=df.groupby('Name').cumcount()+1)
     ...:    .pivot(index='Name', columns='x', values='car')
     ...:    .add_prefix('car_')
     ...:    .reset_index()
     ...:    .rename_axis(None,1))
     ...:
Out[190]:
   Name  car_1 car_2
0  John  Volvo  Fiat
1  Paul  Dacia  None

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 2020-05-10
    • 2019-12-12
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多