【问题标题】:Pandas merge several rows with different columns into one rowPandas 将具有不同列的几行合并为一行
【发布时间】:2021-08-16 06:46:26
【问题描述】:

我的数据框 df 具有以下特征

store_id city_id sales_A sales_B sales_C
STORE01 CITY99 100 Item None None
STORE01 CITY99 None 200 Order None
STORE01 CITY99 None None 300 Client
STORE01 CITY99 150 Order None 300 Client
...

所有行都将具有相同的特征,其中相同的 store idcity ID 有 1 行或更多:

  • 第 1 行:销售 A 有价值,其他无
  • 第 2 行:销售 B 有价值,其他无
  • 第 3 行:销售 C 有价值,其他无
  • 第 4 行:销售 A 具有价值(但与第 1 行不同),其他无

注意值不是数字,是字符串,必须保持为字符串

行的顺序可能不同,但基本上每行都有 1 行或更多行,具体取决于销售额。

在 pandas 中,我如何将它们合并为一行,所以结果数据集将是这样的:

store_id city_id sales_A sales_B sales_C
STORE01 CITY99 100 Item, 150 Order 200 Order 300 Client

谢谢

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    使用自定义 lambda 函数删除 None 值和重复值,最后在 , 中加入值 GroupBy.agg

    #if None are strings convert them to NoneType
    #df = df.mask(df == 'None', None)
    
    
    f = lambda x: ', '.join(x.dropna().unique())
    df = df.groupby(['store_id','city_id'], as_index=False).agg(f)
    print (df)
      store_id city_id              sales_A    sales_B     sales_C
    0  STORE01  CITY99  100 Item, 150 Order  200 Order  300 Client
    

    【讨论】:

    • 抱歉,更新了问题。 1 个组合可以在 sales_A、sales_B 或 sales_C 上包含多行。如果我每组只有一个 NaN 值,你的方法就有效
    猜你喜欢
    • 2016-01-07
    • 2019-05-24
    • 1970-01-01
    • 2020-12-23
    • 2021-07-13
    • 2020-01-02
    • 2022-09-23
    • 2019-10-22
    • 2020-09-16
    相关资源
    最近更新 更多