搜索数据帧的一个值,如果另一个数据框中的引用值大于引用值,则将其替换为引用值



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

数据帧 -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,在 df2 中,如果任何客户的交易金额大于 df1 的限制,则将其替换为 df1 的极限值。

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

期望的输出是:

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

尝试使用这个:

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

你可以像这样使用应用程序来做到这一点:

def check_limit(row):
limit = next(iter(df1.loc[df1['Customer'] == row["Customer"]]["Limit"]),0)
return min(limit,row["Amount"])
df2["Amount"] = df2.apply(check_limit, axis=1)
print(df2)

输出

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

最新更新