[英]How do I combine/ensemble results of 3 machine learning models stored in 3 dataframes and output 1 dataframe with results agreed by majority?
[英]How do i populate a dataframe with the results of a function that searches other dataframes?
我正在尝试构建一个数据帧,该数据帧由跨多个数据帧的一系列搜索函数的结果填充,但我不知道从哪里开始 - 我是 python 的新手。
我正在构建的结果表是一个矩阵,每个索引行引用一个数据框,每列代表一个列表。 所需的数据框如下所示:
answer_df
List 1 List 2 List 3
P1 ? ? ?
P2 ? ? ?
P3 ? ? ?
P4 ? ? ?
P5 ? ? ?
P6 ? ? ?
这些值需要来自“在”搜索函数的结果,其中 P1 是用每个列表的内容搜索的。
示例数据框:
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
List 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 次搜索)。 任何帮助将非常感激
您可以使用melt
和isin
来计算匹配的数量(交集):
# 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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.