【问题标题】:Python: combine columns then rows by groupPython:按组组合列然后行
【发布时间】:2018-11-23 16:23:53
【问题描述】:

我有这个数据框:

In [182]: data_set
Out[182]: 
  name  parent  distance  rank
0  x     aaa      10        1
1  x     bbb      5         1
2  x     fff      3         2
3  y     aaa      2         2
4  y     bbb      10        1
5  z     ccc      8         2 

我想把它改造成:

  name          Combined
  x     ('aaa',10,1),('bbb',5,1),('fff',3,2)
  y     ('aaa',2,2),('bbb',10,1)
  z     ('ccc',8,2)

然后我想把它转换成dataframe 3x2,有两列name和combined。 我正在考虑使用 zip 或 group 但它们返回不同的输出。

【问题讨论】:

    标签: python list pandas tuples pandas-groupby


    【解决方案1】:

    首先将您的列合并到tuple,然后将groupby 合并到list。

    df['combined'] = df[['parent', 'distance', 'rank']].apply(tuple, axis=1)
    
    res = df.groupby('name')['combined'].apply(list).reset_index()
    
    print(res)
    
      name                                  combined
    0    x  [(aaa, 10, 1), (bbb, 5, 1), (fff, 3, 2)]
    1    y               [(aaa, 2, 2), (bbb, 10, 1)]
    2    z                             [(ccc, 8, 2)]
    

    【讨论】:

    • 谢谢@jpp。您的解决方案运行良好,输出正是我想要的!
    【解决方案2】:

    通过使用groupby 和apply

    df.groupby('name')[['parent','distance','rank']].apply(lambda x : x.values.tolist())
    Out[14]: 
    name
    x    [[aaa, 10, 1], [bbb, 5, 1], [fff, 3, 2]]
    y                 [[aaa, 2, 2], [bbb, 10, 1]]
    z                               [[ccc, 8, 2]]
    dtype: object
    

    【讨论】:

    • 谢谢@Wen!您的解决方案工作正常,但它返回“系列”而不是数据框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多