簡體   English   中英

如何在Pandas中兩個相關數據框的兩列之間進行比較

[英]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來匹配州和縣的每筆貸款的限額。 然后,您可以立即進行布爾比較,以檢查jumboTrue還是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM