【问题标题】:Pandas: collapse rows with same column ID and concatenate multiple columns into 1Pandas:折叠具有相同列 ID 的行并将多列连接为 1
【发布时间】:2022-01-26 23:35:12
【问题描述】:

如果不迭代数据框,是否可以使用 pandas 方法从中“折叠”

index    ID     fruits    qty
0        101    oranges   1
1        134    apples    2
2        576    pears     3
3        837    apples    1
4        576    oranges   2
5        134    pears     3

对此(并在将信息汇总为单个字符串的过程中生成一个新的description 列):

index    ID     description
0        101    101: orange(1)
1        134    134: apples(2) pears(3)
2        576    576: pears(3) oranges(2)
3        837    837: apples(1)

请注意,这是对this question 的转译。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先将列fruitsqty 连接,然后聚合join,最后添加ID 转换为字符串:

    df['description'] = df['fruits'] + '(' + df['qty'].astype(str) + ')'
    
    df = df.groupby('ID')['description'].agg(' '.join).reset_index()
    df['description'] = df['ID'].astype(str)  + ': ' + df['description'] 
    print (df)
        ID               description
    0  101           101: oranges(1)
    1  134   134: apples(2) pears(3)
    2  576  576: pears(3) oranges(2)
    3  837            837: apples(1)
    

    GroupBy.apply 的另一个想法:

    def f(x):
        d = x['fruits'] + '(' + x['qty'].astype(str) + ')'
        return x.name.astype(str)  + ': ' + ' '.join(d)
    
    df = df.groupby('ID').apply(f).reset_index(name='description')
    
    print (df)
        ID               description
    0  101           101: oranges(1)
    1  134   134: apples(2) pears(3)
    2  576  576: pears(3) oranges(2)
    3  837            837: apples(1)
    

    【讨论】:

      【解决方案2】:

      使用 Pandas 有应用功能。 使用此函数,您可以将 lambda 函数应用于行、列甚至整个数据帧。

      这是该函数的文档链接。 https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-26
        • 2021-07-16
        • 2020-12-23
        • 2019-08-07
        • 1970-01-01
        • 2021-02-22
        • 2014-01-10
        • 1970-01-01
        相关资源
        最近更新 更多