假設我有一個帶有編碼列和許多映射表的“基本”DF - 例如,它們中的每一個都包含一個字典,用于來自基本 df 的一個編碼列
基礎 df: df
RETAILER STATE_CODE SIZE_CODE POTENTIAL_CODE
store1 1 008 222
store2 2 001 111
store3 3 006 333
映射表1:mp_df1
STATE_CODE STATE_NAME
1 California
2 Nevada
3 Washington
映射表2:mp_df2
SIZE_CODE SIZE_NAME
001 Small
006 Moderate
008 Big
映射表3:mp_df3
POTENTIAL_CODE POTENTIAL_NAME
111 Small
222 Moderate
333 Promising
因此,基表對每個映射表都有一個單獨的鍵。
在這種情況下,我可以使用 3 個合并,但在現實生活中,我擁有的不僅僅是 3 個映射表,因此“手動”執行它真的很煩人。有沒有一種更簡單的方法可以將這些 df 組合成一個?
RETAILER STATE_CODE SIZE_CODE POTENTIAL_CODE STATE_NAME SIZE_NAME POTENTIAL_NAME
store1 1 008 222 California Big Moderate
store2 2 001 111 Nevada Small Small
store3 3 006 333 Washington Moderate Promising
uj5u.com熱心網友回復:
您可以使用pd.concat和map:
out = pd.concat([df,
df['STATE_CODE'].map(mp_df1.set_index('STATE_CODE').squeeze()),
df['SIZE_CODE'].map(mp_df2.set_index('SIZE_CODE').squeeze()),
df['POTENTIAL_CODE'].map(mp_df3.set_index('POTENTIAL_CODE').squeeze())], axis=1)
print(out)
# Output:
RETAILER STATE_CODE SIZE_CODE POTENTIAL_CODE STATE_CODE SIZE_CODE \
0 store1 1 008 222 California Big
1 store2 2 001 111 Nevada Small
2 store3 3 006 333 Washington Moderate
POTENTIAL_CODE
0 Moderate
1 Small
2 Promising
uj5u.com熱心網友回復:
我真的不敢相信解決方案有多簡單,盡管它可能還沒有優化。
results = df
dataframes_list = ['mp_df1', 'mp_df2', 'mp_df3']
for i in range(len(dataframes_list)):
result = pd.merge(results, dataframes_list[i], how='left')
似乎作業得很好——顯然,假設映射表只有 2 列:代碼和名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/407032.html
標籤:
