【问题标题】:Match unique group from another dataframe - one to many match匹配来自另一个数据框的唯一组 - 一对多匹配
【发布时间】:2023-02-04 14:14:56
【问题描述】:

df1是盒子里的信息。 每个盒子都有不同的体积大小 盒子A的体积是30,B是25,等等。

df1 = pd.DataFrame({'boxID':['A', 'B', 'C', 'D'],'volume':[30,25,30,10]})
df1.set_index("boxID")
    volume
boxID   
A   30
B   25
C   30
D   10

df2是产品的信息 每个产品都有不同的数量

df2 = pd.DataFrame({'Product No':['1', '2', '3', '4', '5', '6', '7'],'amount':[10, 5, 13, 15, 20, 10, 17]})
df2.set_index("Product No")
    amount
Product No  
1   10
2   5
3   13
4   15
5   20
6   10
7   17

插入df2 的“box id”列找到并匹配适当的盒子IDdf1。就像底部的数据框。

output_df2 = pd.DataFrame({'Product No':['1', '2', '3', '4', '5', '6', '7'],'amount':[10, 5, 13, 15, 20, 10, 17], 'box ID':['A', 'A', 'A', 'B', 'C', 'C', 'D']})
output_df2.set_index("Product No")

    amount  box ID
Product No      
1   10  A
2   5   A
3   13  A
4   15  B
5   20  C
6   10  C
7   17  D

从上往下依次添加数量(df2),接近每个箱子体积(df1)但不超过每个箱子

例如,由于df1的第一个盒子体积是30, 所以它可以包含 df2 的第一行产品(数量 10),第二行(数量 5)和第三行(数量 13) 等于 30,因为 10+5+13 = 28。 (但是,如果加到第4行,10+5+13+15 = 43,超过了30

Python还是初学者,请各位高手多多指教。这对我来说是一项非常重要的任务。

在 df2 的 box id 列中匹配 df1 的适当 box id。

【问题讨论】:

    标签: python pandas dataframe mapping match


    【解决方案1】:

    你试过 pd.merge(left,right, on='')

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      相关资源
      最近更新 更多