我正在使用两个数据框。第一个,d1
...
+-------+----------+-------------+-------+
| Index | Location | Num of Reps | Sales |
+-------+----------+-------------+-------+
| 0 | 75894 | 3 | 12 |
| 1 | 75286 | 7 | 24 |
| 2 | 27659 | 3 | 17 |
| 3 | 38482 | 6 | 19 |
| 4 | 78634 | 8 | 21 |
+-------+----------+-------------+-------+
和第二个d2
+-------+--------+
| Index | Profit |
+-------+--------+
| 27654 | 132.65 |
| 75894 | 140.38 |
| 75286 | 310.28 |
| 38482 | 290.83 |
| 75894 | 156.78 |
| 86753 | 302.35 |
+-------+--------+
在d2中,位置值被列为索引。 d2具有比d1更多的行,并且只有来自d2的位置值的子集与来自d1的位置值的子集相匹配。
我想要的是一个新的数据帧(d3
),它包含位置值的交集,如果匹配则包含来自两个数据帧的所有列数据。在这个例子中,它看起来像......
+-------+----------+-------------+-------+--------+
| Index | Location | Num of Reps | Sales | Profit |
+-------+----------+-------------+-------+--------+
| 0 | 75894 | 3 | 12 | 140.38 |
| 1 | 75286 | 7 | 24 | 310.28 |
| 2 | 38482 | 6 | 19 | 290.83 |
+-------+----------+-------------+-------+--------+
以下是我在编码方面的想法:
d2['Location'] = d2(0, axis=1)
d2.reset_index(drop=True, inplace=True)
d3 = d1
#d3['Profit'] = <missing code>
对于注释掉的行,我想也许某种lambda函数会检查匹配的邮政编码,并在匹配的情况下附加相关值。但我不确定它是否可以一行完成。
上面代码的第一行会引发以下错误:
TypeError: 'DataFrame' object is not callable