【发布时间】:2019-05-23 17:22:07
【问题描述】:
我正在迭代多个 pandas 数据帧,在每次迭代中我提取 2 个列表。 然后,对于每 2 个列表组合,我需要在另一个数据框中找到这 2 个列表中所有值的每个组合出现的行。
简化示例:
df 看起来像这样(任何 D_val P_val 可能只出现一次):
D_val | P_val | D_PCode
A | 1 | 25
D | 1 | 21
C | 2 | 32
B | 4 | 35
D | 2 | 126
B | 1 | 3
C | 1 | 312
对于具有以下列表的单次迭代 -
list1 = [1,2]
list2 = [A,B,C]
我希望得到以下列表:
[25、3、312、32]
解释:
for [A,1] - 25
for [A,2] - nothing
For [B,1] - 3
等等。
我使用嵌套循环来实现它,但是由于多次迭代、大型数据框和长列表,它需要的时间太长了。
任何建议如何有效地实施它?如果需要,我很乐意使用其他数据结构。
【问题讨论】:
-
由于您的 D_P 组合是唯一的,您可以为该行(A1、D1、C2 等)创建一个 D 和 P 连接的索引,使用
itertools.product获得笛卡尔积列表,然后将其用作 df 的掩码。如果这对您有意义,我可以尝试将其扩展为答案。
标签: python pandas list dataframe combinations