次のように5つのデータフレームがあります。
df1:
provinceCode provinceName
0 11 XXX
1 12 XXX
2 13 XXX
3 14 XXX
4 15 XXX
df2:
cityCode cityName provinceCode
0 1101 XXX 11
1 1201 XXX 12
2 1301 XXX 13
3 1302 XXX 13
4 1303 XXX 13
df3:
areaCode areaName cityCode provinceCode
0 110101 XXX 1101 11
1 110102 XXX 1101 11
2 110105 XXX 1101 11
3 110106 XXX 1101 11
4 110107 XXX 1101 11
df4:
streetCode streetName areaCode provinceCode cityCode
0 110101001 XXX 110101 11 1101
1 110101002 XXX 110101 11 1101
2 110101003 XXX 110101 11 1101
3 110101004 XXX 110101 11 1101
4 110101005 XXX 110101 11 1101
df5:
villageCode villageName streetCode provinceCode cityCode areaCode
0 110101001001 XXX 110101001 11 1101 110101
1 110101001002 XXX 110101001 11 1101 110101
2 110101001005 XXX 110101001 11 1101 110101
3 110101001006 XXX 110101001 11 1101 110101
4 110101001007 XXX 110101001 11 1101 110101
すべてのdf、特に名前とドロップコードの列をマージしたいと思っています。私はそれらを1つずつマージしようとしましたが、これは非常に非効率的です。それを行うためのより良い方法があるかどうかだけ疑問に思いますか?ありがとう。これが私が試したことです:
df6 = df5.merge(df4[['code', 'name']], left_on = 'provinceCode', right_on = 'code', how = 'left')
df7 = df6.merge(df3[['code', 'name']], left_on = 'areaCode', right_on = 'code', how = 'left')
df8 = df7.merge(df2[['code', 'name']], left_on = 'areaCode', right_on = 'code', how = 'left')
df = df8.merge(df1[['provinceCode', 'provinceName']], left_on = 'provinceCode', right_on = 'code', how = 'left')
回答の礼儀@OPを更新しました:
dfs = [df1, df2, df3, df4, df5]
from functools import partial
outer_merge = partial(pd.merge, how='outer')
reduce(outer_merge, dfs)
(古い回答-使用しないでください)
サークルごとにバリエーションを作成する必要はありません。それらを連鎖させる:
df= df5.merge(df4[['code', 'name']],
left_on='provinceCode',
right_on='code',
how='left'
).merge(df3[['code', 'name']],
left_on='areaCode',
right_on='code',
how = 'left'
).merge(df2[['code', 'name']],
left_on='areaCode',
right_on='code',
how ='left'
).merge(df1[['provinceCode', 'provinceName']],
left_on='provinceCode',
right_on='code',
how='left')
更新:Reduceはシンプルさと速度の点で優れていますが、読みやすさのために、合併に比べて読みにくくなっています。コードを乾燥させることができます。
common_joins = dict(right_on='code', how='left')
common_columns = ['code', 'name']
df= df5.merge(df4[common_columns],
left_on='provinceCode',
**common_joins
).merge(df3[common_columns],
left_on='areaCode',
**common_joins
).merge(df2[common_columns],
left_on='areaCode',
**common_joins
).merge(df1[['provinceCode', 'provinceName']],
left_on='provinceCode',
**common_joins)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加