基于其他datafram中提供的范围值创建新列

2024-09-20 22:54:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,其中一个数据帧作为参考表,另一个包含实际值。你知道吗

>>> reference_table
   MinRange  MaxRange  Multiplier Group
0        10        30           2     A
1        10        40           4     B
2        10        14          10     C
3        15        19           8     C
4        20        24           6     C

>>> df2
  Group  Element  Value
0     A       15      7
1     B       37      8
2     C       12      9
3     C       23     10

在这里,我想在data数据框中创建一个新列Updated Value,如下所示-

>>> data
  Group  Element  Value  Updated Value
0     A       15      7             14
1     B       37      8             32
2     C       12      9             90
3     C       23     10             60

更新后的值创建如下-

第1行:Element=15&;Group=A,它位于A组的参考表的MinRange&MaxRange中。因此,更新后的值=Value*Multiplier=7*2=14

第2行:Element=37&;Group=B,它位于组B的参考表的MinRange&MaxRange中。因此,更新后的值=Value*Multiplier=8*4=32

第3行:Element=12&;Group=C,位于C组(索引2)的参考表的MinRange(10)和MaxRange(14)中。因此,更新值=值*乘数=9*10=90

第4行:Element=23&;Group=C,位于C组(索引4)的参考表的MinRange(10)和MaxRange(14)中。因此,更新值=值*乘数=10*6=60

如何使用pandas创建这样一个列?我试过几种方法,但都不管用。很高兴被指向任何参考或类似的问题。你知道吗


Tags: 数据pandasdatavaluetablegroupelementamp
1条回答
网友
1楼 · 发布于 2024-09-20 22:54:55

mergequery开始的解决方案:

res = pd.merge(df1, df2, on='Group')
res = res.query('MinRange <= Element <= MaxRange')
res['Updated Value'] = res['Value'] * res['Multiplier']
res = res[['Group', 'Element', 'Value', 'Updated Value']].reset_index(drop=True)

res
  Group  Element  Value  Updated Value
0     A       15      7             14
1     B       37      8             32
2     C       12      9             90
3     C       23     10             60

相关问题 更多 >

    热门问题