簡體   English   中英

如何使用搜索其他數據幀的函數的結果填充數據幀?

[英]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 次搜索)。 任何幫助將非常感激

您可以使用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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM