首页 > 解决方案 > 给定两个数据帧,查找满足逻辑方程的所有数据帧索引

问题描述

我必须将我试图关联在一起的数据框并找出一些信息:

df1

Name    Logic
Ford    AAA|BBB
Chevy   JJJ|FFF&DDD|AAA|LLL
Porsche FFF&TTT&UUU|OOO|BBB

df2

idx    AAA   BBB   CCC   DDD   JJJ   FFF   LLL   TTT   UUU   OOO
7T1    True  True  True  False True  True  False True  True  False
8F4    False True  True  False True  False False False True  False
4Q2    True  True  True  True  False True  True  False False True
3Y7    False False False False True  False True  True  True  False

我试图找到满足 df1 中每个方程的每个索引值,并将它们放入包含列表的新列中。两个数据框都会有更多条目,但为了理智起见,我将它们保持简短。

结果df:

Name    Logic                       Solutions
Ford    AAA|BBB                 ['7T1','8F4','4Q2']
Chevy   JJJ|FFF&DDD|AAA|LLL     ['7T1','8F4','4Q2','3Y7']
Porsche FFF&TTT&UUU             ['7T1']

标签: pythonpandas

解决方案


让我们尝试使用query,注意这是因为“简单”的列命名,如果您的列包含空格或特殊字符,使用queryf-string 将不起作用。此外,这需要 python 3.6+:

df1['Solutions'] = df1.apply(lambda x: df2.query(f"{x['Logic']}")
                                          .index.to_series()
                                          .unique(), 
                             axis=1)
print(df1)

输出:

      Name                Logic             Solutions
0     Ford              AAA|BBB       [7T1, 8F4, 4Q2]
1    Chevy  JJJ|FFF&DDD|AAA|LLL  [7T1, 8F4, 4Q2, 3Y7]
2  Porsche          FFF&TTT&UUU                 [7T1]

推荐阅读