首页 > 解决方案 > 搜索数据帧的一个值,如果它大于参考值,则替换为另一个数据帧中的参考值

问题描述

我在 Python pandas df1 和 df2 中有两个表。

DataFrame -df1(100 条记录)。

No  Customer    Age City    Product  Limit  Company Segment
1   A1  46.49   BANGALORE   Gold     500000.0   C1  Self Employed
2   A2  46.49   CALCUTTA    Silver   100000.0   C2  Salaried_MNC
3   A3  46.49   COCHIN      Platimum 10000.0    C3  Salaried_Pvt
4   A4  46.49   BOMBAY      Platimum 10001.0    C4  Govt
5   A5  46.49   BANGALORE   Platimum 10002.0    C5  Normal Salary

df2(2000 条记录)

No: Customer Month      Type        Amount
1   A1       12-Jan-04  JEWELLERY   585470.80
2   A1       3-Jan-04   PETRO       410556.13
3   A1       15-Jan-04  CLOTHES     23740.46
4   A3       25-Jan-04  FOOD        8000.47
5   A3       17-Jan-05  CAMERA      16000.07

df1 具有唯一的客户和信用额度条目,df2 具有针对客户的多个交易记录。现在我必须针对每个客户和金额检查 df2,如果任何客户的交易金额大于 df1 的限制,则在 df2 中将其替换为 df1 的限制值。

简而言之——如果客户 A1 和 df2 中的金额大于客户 A1 在 df1 中的限制,则将 df2 中的金额值替换为 df1 中的限制值。

所需的输出是:

df3:

No: Customer Month      Type        Amount
1   A1       12-Jan-04  JEWELLERY   500000.00
2   A1       3-Jan-04   PETRO       410556.13
3   A1       15-Jan-04  CLOTHES     23740.46
4   A3       25-Jan-04  FOOD        8000.47
5   A3       17-Jan-05  CAMERA      10000.00

标签: pythonpandasdataframe

解决方案


尝试使用这个:

df3 = df2.merge(df1[['Customer','Limit']], how='left', on='Customer')
df3.loc[df3['Amount']>df3['Limit'], 'Amount'] = df3['Limit']
df3.drop('Limit', axis=1, inplace=True)

结果:

   No: Customer      Month       Type     Amount
0    1       A1  12-Jan-04  JEWELLERY  500000.00
1    2       A1   3-Jan-04      PETRO  410556.13
2    3       A1  15-Jan-04    CLOTHES   23740.46
3    4       A3  25-Jan-04       FOOD    8000.47
4    5       A3  17-Jan-05     CAMERA   10000.00

推荐阅读