Pandas数据帧Cross-Reference/SelectiveJoin/Overlay?
Pandas DataFrame Cross-Reference/Selective Join/Overlay?
在两个 Pandas 数据帧之间进行选择性 lookup/cross-reference/overlay/partial 连接的 best/fastest 方法是什么?我不确定使用正确的术语....
鉴于:
- 一个主要的 table 填充了数值和一些任意的 lookup/reference 字符串,由 date/month
索引
- 次要 table,索引与第一个一致。此数据框的列与主 table 中的任意 lookup/reference 字符串匹配,可以随时间变化,并用作查找列以替换主 table.[=54= 中的值]
两个 table 的索引不一定需要完全相同的集合(甚至是连续的),但如果在 Table 中存在查找1 显然需要在 Table 2.
中对应一行
即我想在 Table 1 中找到每个 lookup/placeholder 并用 Table 2[= 中的正确查找值替换57=] 来自正确的月份。
示例如下:
Table 1
dte
value1
value2
2022-01
1
2
2022-02
3
LOOKUP1
2022-03
LOOKUP3
4
2022-04
5
6
Table 2
dte
LOOKUP1
LOOKUP2
LOOKUP3
2021-12
101
105
109
2022-02
102
106
110
2022-03
103
107
111
2022-10
104
108
112
结果
dte
value1
value2
2022-01
1
2
2022-02
3
102
2022-03
111
4
2022-04
5
6
我需要在我的用例中做很多这样的事情,所以我希望至少能相当快地完成一些事情。我不是 Pandas 方面的专家,想知道是否有聪明的方法可以做到这一点。我可以遍历 Table 1 中的每个 row/column,查找与 Table 2[=57 中的列名匹配的值=] 然后在 Table 2 中查找并替换 Table 1 中的值。在 Pandas 中似乎经常有一种聪明的方法来做这种事情,它会自动为你并行化。任何帮助将不胜感激!
一种简单的方法是使用 replace ,速度不确定
out = tb1.set_index('dte').T.replace(tb2.set_index('dte').T).T
Out[172]:
value1 value2
dte
2022-01 1 2
2022-02 3 102
2022-03 111 4
2022-04 5 6
在两个 Pandas 数据帧之间进行选择性 lookup/cross-reference/overlay/partial 连接的 best/fastest 方法是什么?我不确定使用正确的术语....
鉴于:
- 一个主要的 table 填充了数值和一些任意的 lookup/reference 字符串,由 date/month 索引
- 次要 table,索引与第一个一致。此数据框的列与主 table 中的任意 lookup/reference 字符串匹配,可以随时间变化,并用作查找列以替换主 table.[=54= 中的值]
两个 table 的索引不一定需要完全相同的集合(甚至是连续的),但如果在 Table 中存在查找1 显然需要在 Table 2.
中对应一行即我想在 Table 1 中找到每个 lookup/placeholder 并用 Table 2[= 中的正确查找值替换57=] 来自正确的月份。
示例如下:
Table 1
dte | value1 | value2 |
---|---|---|
2022-01 | 1 | 2 |
2022-02 | 3 | LOOKUP1 |
2022-03 | LOOKUP3 | 4 |
2022-04 | 5 | 6 |
Table 2
dte | LOOKUP1 | LOOKUP2 | LOOKUP3 |
---|---|---|---|
2021-12 | 101 | 105 | 109 |
2022-02 | 102 | 106 | 110 |
2022-03 | 103 | 107 | 111 |
2022-10 | 104 | 108 | 112 |
结果
dte | value1 | value2 |
---|---|---|
2022-01 | 1 | 2 |
2022-02 | 3 | 102 |
2022-03 | 111 | 4 |
2022-04 | 5 | 6 |
我需要在我的用例中做很多这样的事情,所以我希望至少能相当快地完成一些事情。我不是 Pandas 方面的专家,想知道是否有聪明的方法可以做到这一点。我可以遍历 Table 1 中的每个 row/column,查找与 Table 2[=57 中的列名匹配的值=] 然后在 Table 2 中查找并替换 Table 1 中的值。在 Pandas 中似乎经常有一种聪明的方法来做这种事情,它会自动为你并行化。任何帮助将不胜感激!
一种简单的方法是使用 replace ,速度不确定
out = tb1.set_index('dte').T.replace(tb2.set_index('dte').T).T
Out[172]:
value1 value2
dte
2022-01 1 2
2022-02 3 102
2022-03 111 4
2022-04 5 6