[英]How to compare between two columns across two related Dataframes in pandas
我有一個名為schemas_df的數據框架,具有以下架構:
"County Name" "State" "One-Unit Limit"
看起來像:
data1 = {'County Name': ["A", "B", "C", "D"], 'State': ['AA', 'AB', 'AA', 'AC'], 'One-Unit Limit': [100, 200, 150, 300]}
limits_df = pd.DataFrame.from_dict(data1)
我還有另一個名為schema_df的DataFrame結構:
county state price
看起來像:
data2 = {'county': ["B", "C", "A", "E"], 'state': ['AB', 'AC', 'AA', 'AF'], 'price': [300, 200, 150, 300]}
loans_df = pd.DataFrame.from_dict(data2)
我想在loan_df [“ jumbo”]中創建一個新列,當貸款價格大於其相應縣的限制時為True。 在代碼中將是:
county_limit = limits_df.loc[ (limits_df["County Name"] == str(loans_df["county"])) & (limits_df["State"] == str(loans_df["state"])) ]["One-Unit Limit"].item()
loan_price = loans_df["price"].item()
if(loan_price > county_limit):
loans_df["jumbo"] = True
else:
loans_df["jumbo"] = False
由於我需要創建loan_df [“ jumbo”],然后更改應為不可變數據的內容, iterrows
要花很長時間才能完成。 有沒有更簡單的方法可以通過apply()
或map()
來做到這一點?
IIUC,您可以使用
df2 = loans_df.merge(limits_df[['State', 'County Name', 'One-Unit Limit']], how='left',
left_on=['state', 'county'], right_on=['State', 'County Name'])
df2['jumbo'] = df2['price'] > df2['One-Unit Limit']
在使用帶有左連接的pd.merge
來匹配州和縣的每筆貸款的限額。 然后,您可以立即進行布爾比較,以檢查jumbo
是True
還是False
。
請注意,當沒有找到州/縣的限制時,它將在Jumbo中輸出False
。
這假設在limits_df
中找到loans_df
中的所有縣loans_df
loans_df['jumbo'] = pd.merge(limits_df, loans_df,
left_on=['County Name', 'State'],
right_on=['county', 'state'], how='left') \
.apply(lambda x: x['price'] > x['One-Unit Limit'], axis=1)
m=limits_df.merge(loans_df,left_on=['County Name','State'],right_on=['county','state'])
loans_df["jumbo"]=loans_df['county'].isin(m.loc[m['price']>m['One-Unit Limit'],'County Name'])
print(loans_df)
county state price jumbo
0 B AB 300 True
1 C AC 200 False
2 A AA 150 True
3 E AF 300 False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.