英文:
How to match one column of dataframe to another based on multiple columns?
问题
我需要从第一个数据框(2022年)中获取效率值,并将其放入第二个数据框(2023年),在所有定性列上进行匹配:“Country”,“State”,“District”,“Month”,“Type”和“Name”。
第一个数据框:
Country | State | District | Year | Month | Type | Name | No of Jobs | Hours | Efficiency |
---|---|---|---|---|---|---|---|---|---|
美国 | AL | A | 2022 | 1 | 新 | AA | 54 | 209 | 4 |
美国 | AK | B | 2022 | 2 | 新 | BB | 65 | 382 | 6 |
美国 | AZ | C | 2022 | 3 | 旧 | CC | 78 | 838 | 11 |
美国 | CA | D | 2022 | 4 | 新 | DD | 43 | 632 | 15 |
美国 | MD | E | 2022 | 5 | 旧 | EE | 24 | 194 | 8 |
美国 | ME | F | 2022 | 6 | 旧 | FF | 54 | 283 | 5 |
第二个数据框:
Country | State | District | Year | Month | Type | Name | No of Jobs | Hours | Efficiency |
---|---|---|---|---|---|---|---|---|---|
美国 | AL | A | 2023 | 1 | 新 | AA | 76 | 546 | 7 |
美国 | AK | B | 2023 | 2 | 新 | BB | 52 | 301 | 6 |
美国 | AZ | C | 2023 | 3 | 旧 | CC | 41 | 455 | 11 |
美国 | CA | D | 2023 | 4 | 新 | DD | 50 | 301 | 6 |
美国 | MD | E | 2023 | 5 | 旧 | EE | 85 | 537 | 6 |
美国 | ME | F | 2023 | 6 | 旧 | FF | 42 | 889 | 21 |
期望的输出:
Country | State | District | Year | Month | Type | Name | No of Jobs | Hours | Efficiency |
---|---|---|---|---|---|---|---|---|---|
美国 | AL | A | 2023 | 1 | 新 | AA | 76 | 294 | 4 |
美国 | AK | B | 2023 | 2 | 新 | BB | 52 | 306 | 6 |
美国 | AZ | C | 2023 | 3 | 旧 | CC | 41 | 440 | 11 |
美国 | CA | D | 2023 | 4 | 新 | DD | 50 | 735 | 15 |
美国 | MD | E | 2023 | 5 | 旧 | EE | 85 | 687 | 8 |
美国 | ME | F | 2023 | 6 | 旧 | FF | 42 | 220 | 5 |
英文:
I need to take the efficiency values from the first dataframe (2022) and put it into the second dataframe (2023), matching it on all the qualitative columns: "Country", "State", "District", "Month", "Type" and "Name"
First dataframe:
Country | State | District | Year | Month | Type | Name | No of Jobs | Hours | Efficiency |
---|---|---|---|---|---|---|---|---|---|
USA | AL | A | 2022 | 1 | New | AA | 54 | 209 | 4 |
USA | AK | B | 2022 | 2 | New | BB | 65 | 382 | 6 |
USA | AZ | C | 2022 | 3 | Old | CC | 78 | 838 | 11 |
USA | CA | D | 2022 | 4 | New | DD | 43 | 632 | 15 |
USA | MD | E | 2022 | 5 | Old | EE | 24 | 194 | 8 |
USA | ME | F | 2022 | 6 | Old | FF | 54 | 283 | 5 |
Second dataframe:
Country | State | District | Year | Month | Type | Name | No of Jobs | Hours | Efficiency |
---|---|---|---|---|---|---|---|---|---|
USA | AL | A | 2023 | 1 | New | AA | 76 | 546 | 7 |
USA | AK | B | 2023 | 2 | New | BB | 52 | 301 | 6 |
USA | AZ | C | 2023 | 3 | Old | CC | 41 | 455 | 11 |
USA | CA | D | 2023 | 4 | New | DD | 50 | 301 | 6 |
USA | MD | E | 2023 | 5 | Old | EE | 85 | 537 | 6 |
USA | ME | F | 2023 | 6 | Old | FF | 42 | 889 | 21 |
Desired output:
Country | State | District | Year | Month | Type | Name | No of Jobs | Hours | Efficiency |
---|---|---|---|---|---|---|---|---|---|
USA | AL | A | 2023 | 1 | New | AA | 76 | 294 | 4 |
USA | AK | B | 2023 | 2 | New | BB | 52 | 306 | 6 |
USA | AZ | C | 2023 | 3 | Old | CC | 41 | 440 | 11 |
USA | CA | D | 2023 | 4 | New | DD | 50 | 735 | 15 |
USA | MD | E | 2023 | 5 | Old | EE | 85 | 687 | 8 |
USA | ME | F | 2023 | 6 | Old | FF | 42 | 220 | 5 |
答案1
得分: 1
我们可以使用 pandas
中的 merge
函数,根据多个列匹配一个 dataframe
中的行与另一个 dataframe
。以下是代码示例,只需将 df1
和 df2
替换为您的实际数据框架名称。
import pandas as pd
df1_selected = df1[['Country', 'State', 'District', 'Month', 'Type', 'Name', 'Efficiency']].rename(columns={'Efficiency': 'Efficiency_2022'})
df_merged = pd.merge(df2, df1_selected, on=['Country', 'State', 'District', 'Month', 'Type', 'Name'], how='left')
df_merged['Efficiency'] = df_merged['Efficiency_2022']
df_merged = df_merged.drop(columns=['Efficiency_2022'])
df_merged
请注意,这是一段用于在两个数据框架之间合并数据的示例代码。
英文:
We could use the merge
function in pandas
to match rows in one dataframe
with another based on multiple columns. Here is the code below, just replace df1
and df2
with the actual names of your dataframes
.
import pandas as pd
df1_selected = df1[['Country', 'State', 'District', 'Month', 'Type', 'Name', 'Efficiency']].rename(columns={'Efficiency': 'Efficiency_2022'})
df_merged = pd.merge(df2, df1_selected, on=['Country', 'State', 'District', 'Month', 'Type', 'Name'], how='left')
df_merged['Efficiency'] = df_merged['Efficiency_2022']
df_merged = df_merged.drop(columns=['Efficiency_2022'])
df_merged
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论