Python 中的双向查找
Two-Way lookup in Python
所以基本上我有 2 个像这样的 DataFrame:
Table_1
Apple
Banana
Orange
Date
1
2
4
2020
3
5
2
2021
7
8
9
2022
Table_2
fruit
year
Apple
2020
Apple
2021
Apple
2022
Banana
2020
Banana
2021
Banana
2022
Orange
2020
Orange
2021
Orange
2022
所以我想根据水果名称和相应的年份从 Table_1 中查找 Table_2 的水果值。
最终结果应该是这样的:
fruit
year
number
Apple
2020
1
Apple
2021
3
Apple
2022
7
Banana
2020
2
Banana
2021
5
Banana
2022
8
Orange
2020
4
Orange
2021
2
Orange
2022
9
在 Excel 中举个例子,可以这样做:
=INDEX(Table1[[Apple]:[Orange]],MATCH([@year],Table1[Date],0),MATCH([@fruit],Table1[[#Headers],[Apple]:[Orange]],0))
但是在Python中有什么方法呢?
假设 pandas,您可以 melt
和 merge
:
out = (df2
.merge(df1.rename(columns={'Date': 'year'})
.melt('year', var_name='fruit', value_name='number'),
how='left'
)
)
输出:
fruit year number
0 Apple 2020 1
1 Apple 2021 3
2 Apple 2022 7
3 Banana 2020 2
4 Banana 2021 5
5 Banana 2022 8
6 Orange 2020 4
7 Orange 2021 2
8 Orange 2022 9
所以基本上我有 2 个像这样的 DataFrame:
Table_1
Apple | Banana | Orange | Date |
---|---|---|---|
1 | 2 | 4 | 2020 |
3 | 5 | 2 | 2021 |
7 | 8 | 9 | 2022 |
Table_2
fruit | year |
---|---|
Apple | 2020 |
Apple | 2021 |
Apple | 2022 |
Banana | 2020 |
Banana | 2021 |
Banana | 2022 |
Orange | 2020 |
Orange | 2021 |
Orange | 2022 |
所以我想根据水果名称和相应的年份从 Table_1 中查找 Table_2 的水果值。
最终结果应该是这样的:
fruit | year | number |
---|---|---|
Apple | 2020 | 1 |
Apple | 2021 | 3 |
Apple | 2022 | 7 |
Banana | 2020 | 2 |
Banana | 2021 | 5 |
Banana | 2022 | 8 |
Orange | 2020 | 4 |
Orange | 2021 | 2 |
Orange | 2022 | 9 |
在 Excel 中举个例子,可以这样做:
=INDEX(Table1[[Apple]:[Orange]],MATCH([@year],Table1[Date],0),MATCH([@fruit],Table1[[#Headers],[Apple]:[Orange]],0))
但是在Python中有什么方法呢?
假设 pandas,您可以 melt
和 merge
:
out = (df2
.merge(df1.rename(columns={'Date': 'year'})
.melt('year', var_name='fruit', value_name='number'),
how='left'
)
)
输出:
fruit year number
0 Apple 2020 1
1 Apple 2021 3
2 Apple 2022 7
3 Banana 2020 2
4 Banana 2021 5
5 Banana 2022 8
6 Orange 2020 4
7 Orange 2021 2
8 Orange 2022 9