【问题标题】:python pandas groupby sorting and concatenatingpython pandas groupby排序和连接
【发布时间】:2017-02-07 04:12:09
【问题描述】:

我有一个熊猫数据框:

df = pd.DataFrame({'a': [1,1,1,1,2,2,2], 'b': ['a','a','a','a','b','b','b'], 'c': ['o','o','o','o','p','p','p'], 'd': [ [2,3,4], [1,3,3,4], [3,3,1,2], [4,1,2], [8,2,1], [0,9,1,2,3], [4,3,1] ], 'e': [13,12,5,10,3,2,5] })

我想要的是:

第一组按列 a、b、c --- 有两组

然后在每个组内按照e列升序排序

最后在每个组列 d 内连接

所以我想要的结果是:

result = pd.DataFrame({'a':[1,2], 'b':['a','b'], 'c':['o','p'], 'd':[[3,3,1,2,4,1,2,1,3,3,4,2,3,4],[0,9,1,2,3,8,2,1,4,3,1]]})

谁能分享一些快速/优雅的方法来解决这个问题?非常感谢。

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    您可以按e 列排序,按a、b 和c 分组,然后使用列表推导连接d 列(展平它)。请注意,我们可以使用sort,然后使用groupby,因为groupby 会

    保留观察在每个组中的排序顺序:

    根据doc here:

    (df.sort_values('e').groupby(['a', 'b', 'c'])['d']
                        .apply(lambda g: [j for i in g for j in i]).reset_index())
    

    列表理解的替代方法是来自 itertools 的链:

    from itertools import chain
    (df.sort_values('e').groupby(['a', 'b', 'c'])['d']
                        .apply(lambda g: list(chain.from_iterable(g))).reset_index())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2017-07-04
      • 2022-01-16
      • 2019-08-16
      • 2015-01-17
      • 2016-07-12
      • 1970-01-01
      相关资源
      最近更新 更多