如何使用搜索其他数据框的函数的结果填充数据框?



我正在尝试构建一个由一系列跨多个数据帧的搜索函数的结果填充的数据框架,我不知道从哪里开始-我是python的新手。

我正在构建的结果表是一个矩阵,每个索引行引用一个数据框架,每个列代表一个列表。所需的数据帧看起来像:

answer_df
List 1                List 2             List 3

P1            ?                     ?                   ?
P2            ?                     ?                   ?
P3            ?                     ?                   ?
P4            ?                     ?                   ?
P5            ?                     ?                   ?
P6            ?                     ?                   ?

值需要来自于"is "函数,其中用每个列表的内容搜索P1。

dataframe例子:

P1
Index     Diagnosis      Meds     Tests      Obs
0             A12         NAN       NAN      NAN
1             B15         NAN       NAN      NAN
2             C28         NAN       NAN      NAN
3             NAN         D22       NAN      NAN
4             NAN         E91       NAN      NAN
5             NAN         NAN       F14      NAN
6             NAN         NAN       NAN      M55
P2
Index     Diagnosis      Meds     Tests      Obs
0             K11         NAN       NAN      NAN
1             L01         NAN       NAN      NAN
2             C28         NAN       NAN      NAN
3             NAN         X94       NAN      NAN
4             NAN         E91       NAN      NAN
5             NAN         NAN       F14      NAN
6             NAN         NAN       Y02      NAN

列表示例如下:

List 1
A12  
L01
D22
K88
F14
M55
N67
List 2
A12
F14
N64
P01
Y02
M55

我想通过计算P1/P2' and列表1'/List 2之间的匹配次数来填充answer_df,以便它看起来像这样:

answer_df
List 1                List 2             List 3

P1            4                     3                   ?
P2            2                     1                   ?
P3            ?                     ?                   ?
P4            ?                     ?                   ?
P5            ?                     ?                   ?
P6            ?                     ?                   ?

但是我也需要为所有其他列表和数据帧重复这个函数(总共3*6 = 18个搜索)。如有任何帮助,不胜感激

您可以使用meltisin来计算匹配(交叉)的数量:

# Setup 2 dict for dataframes and lists
P = {'P1': p1, 'P2': p2}
L = {'List 1': l1, 'List 2': l2}
data = {}
for pname, p in P.items():
for lname, l in L.items():
count = p.melt().dropna()['value'].isin(l).sum()
print(f"{pname} - {lname} = {count}")
data[(pname, lname)] = count
df = pd.Series(data).unstack()

>>> df
List 1  List 2
P1       4       3
P2       2       2
设置>
import pandas as pd
import numpy as np
from numpy import nan
data1 = {'Diagnosis': ['A12', 'B15', 'C28', nan, nan, nan, nan],
'Meds': [nan, nan, nan, 'D22', 'E91', nan, nan],
'Tests': [nan, nan, nan, nan, nan, 'F14', nan],
'Obs': [nan, nan, nan, nan, nan, nan, 'M55']}
p1 = pd.DataFrame(data1)
data2 = {'Diagnosis': ['K11', 'L01', 'C28', nan, nan, nan, nan],
'Meds': [nan, nan, nan, 'X94', 'E91', nan, nan],
'Tests': [nan, nan, nan, nan, nan, 'F14', 'Y02'],
'Obs': [nan, nan, nan, nan, nan, nan, nan]}
p2 = pd.DataFrame(data2)
l1 = ['A12', 'L01', 'D22', 'K88', 'F14', 'M55', 'N67']
l2 = ['A12', 'F14', 'N64', 'P01', 'Y02', 'M55']

相关内容

  • 没有找到相关文章

最新更新