【问题标题】:Fill values from one dataframe to another with matching IDs使用匹配的 ID 将值从一个数据帧填充到另一个数据帧
【发布时间】:2017-01-31 01:31:58
【问题描述】:

我有两个 pandas 数据框,我想获取 DF1 中每个 ID 的 items_bought 的总和。然后向 DF2 添加一列,其中包含从 DF1 计算的 items_bought 的总和,并使用匹配的 ID 填充,否则将其填充为 0。我怎样才能以优雅和有效的方式做到这一点?

DF1

ID | items_bought
1        5
3        8
2        2
3        5
4        6
2        2

DF2

ID
1
2
8
3
2

期望的结果:DF2 变为

ID | items_bought
1        5
2        4
8        0
3        13
2        4

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    df1.groupby('ID').sum().loc[df2.ID].fillna(0).astype(int)
    Out[104]: 
        items_bought
    ID              
    1              5
    2              4
    8              0
    3             13
    2              4
    
    1. 使用 df1 计算每个 ID 的总和。
    2. 生成的数据框现在由ID 索引,因此您可以通过调用loc 使用df2 ID 进行选择。
    3. 用fillna填补空白。
    4. NA 由浮点类型处理。现在它们已被删除,将列转换回整数。

    【讨论】:

    • 当我做 df2['items_bought'] = df1.groupby('ID')['items_bought'].sum().loc[df2.ID].fillna(0).astype( int) 我收到错误 ValueError: cannot reindex from a duplicate axis。知道为什么吗?
    • 您的 ID 列中有骗子。
    【解决方案2】:

    使用groupby 和sum 解决,然后reindex 使用fill_value=0 和最后reset_index:

    df2 = df1.groupby('ID').items_bought.sum().reindex(df2.ID, fill_value=0).reset_index()
    print (df2)
       ID  items_bought
    0   1             5
    1   2             4
    2   8             0
    3   3            13
    4   2             4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2020-08-31
      • 2021-12-25
      • 2023-03-25
      相关资源
      最近更新 更多