【问题标题】:Make list after groupby in pandas using apply() function使用 apply() 函数在 pandas 中的 groupby 之后创建列表
【发布时间】:2022-01-01 12:56:33
【问题描述】:

我有这个数据框:

    c1  c2  
0   B   1   
1   A   2   
2   B   5
3   A   3
4   A   7

我的目标是继续跟踪 column2 中的值,根据 column1 中用 (:) 分隔的字母,输出应如下所示:

    c1  list
0   A   2:3:7   
1   B   1:5 

最pythonic的方法是什么:

目前我可以按第 1 列进行分组,我正在尝试使用 apply() 函数,但我不知道如何在新列中映射和制作此列表。

【问题讨论】:

    标签: python pandas group-by apply


    【解决方案1】:

    您可以使用groupby

    >>> import pandas as pd
    >>> df = pd.DataFrame({'c1': ['B', 'A', 'B', 'A', 'A'], 'c2': [1, 2, 5, 3, 7]})
    >>>
    >>> df.c2 = df.c2.astype(str)
    >>> new_df = df.groupby("c1")['c2'].apply(":".join).reset_index()
    >>> new_df
      c1     c2
    0  A  2:3:7
    1  B    1:5
    

    【讨论】:

      【解决方案2】:

      我认为你可以只做一个字符串连接

      df = pandas.DataFrame({"c1":list("BABAA"),"c2":[1,2,5,3,7]})
      df['c2'] = df['c2'].astype(str)
      df.groupby('c1').agg({'c2':':'.join})
      

      您可能会获得更多里程

      df.groupby('c1').agg({'c2':list})
      

      【讨论】:

        【解决方案3】:

        试试这个:

        df = df.groupby("c1")["c2"].apply(lambda x: ":".join([str(i) for i in x])).reset_index()
        

        【讨论】:

        • 你可以把它缩短为df.c2.astype(str).groupby(df.c1).apply(":".join).reset_index()
        猜你喜欢
        • 2021-01-12
        • 2017-09-08
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-28
        相关资源
        最近更新 更多