【问题标题】:is there any way to get the following data frame in python pandas?有什么方法可以在 python pandas 中获取以下数据框?
【发布时间】:2020-05-28 06:50:34
【问题描述】:

我有一个这样的数据框:

ID  Distance
100007  0
100007  0
100007  0
100007  0
100007  0
100007  0
100013  39.22
100013  39.21
100013  39.21
100013  39.20
100013  39.19
100013  39.19
100013  39.21
100019  20.28
100019  29.74
100019  29.70
100019  29.73

从上面的数据框中我想得到这个:

ID      d1        d2    d3        d4      d5     d6      d7
100007  0          0    0          0       0      0 
100013  39.22   39.21   39.21   39.20   39.19   39.19   39.21
100019  20.2    29.74   29.70   29.73           

如何通过使用 python 3 pandas 获得这个?请帮我解决这个问题,在此先感谢!

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:
    res = (df
           .astype(str)
           .groupby("ID")
           .Distance.agg(",".join)
           .str.split(",",expand=True)
          )
    
    
    res.columns = [ent+1 for ent in res.columns]
    res.add_prefix("d")
    
             d1     d2      d3      d4      d5      d6      d7
    ID                          
    100007  0.0     0.0     0.0     0.0     0.0     0.0     None
    100013  39.22   39.21   39.21   39.2    39.19   39.19   39.21
    100019  20.28   29.74   29.7    29.73   None    None    None
    

    【讨论】:

    • 非常感谢,这正是我想要的!
    【解决方案2】:
    g = df.groupby('ID')['Distance'].agg(list).to_list()
    df2 = pd.DataFrame(g, columns=['d{}'.format(i) for i in range(1, len(max(g, key=len))+1)])
    print(pd.concat([pd.Series(df['ID'].unique()), df2], axis=1).rename(columns={0:'ID'}))
    

    打印:

           ID     d1     d2     d3     d4     d5     d6     d7
    0  100007   0.00   0.00   0.00   0.00   0.00   0.00    NaN
    1  100013  39.22  39.21  39.21  39.20  39.19  39.19  39.21
    2  100019  20.28  29.74  29.70  29.73    NaN    NaN    NaN
    

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2017-06-30
    • 2018-06-19
    • 2020-04-11
    • 2019-12-23
    • 2013-03-07
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多