我在Python熊猫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,在df2中,是否有任何客户的交易金额大于df1的限制,而不是将其替换为df1的限制值。
简而言之-如果客户A1和df2中的金额大于客户A1在df1中的限制,则用df1中的限制值替换df2中的Amount值。
所需的输出是:
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
答案 0 :(得分:0)
尝试使用此功能:
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
答案 1 :(得分:0)
您可以使用以下应用来做到这一点:
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