GOOGLE ADS

воскресенье, 10 апреля 2022 г.

Эффективный поиск между двумя кадрами данных pandas с использованием векторизации

У меня есть два кадра данных pandas: один — это основные данные (df1), а другой — таблица поиска (df2).

основные данные


















Столбец1...
[Дата 1, Дата 2, Дата 3,...]...
[Дата 11, Дата 21, Дата 31,...]...

Решение проблемы

Насколько я понимаю, чего вы пытаетесь достичь, вы хотите добавить столбец к основным данным, показанным ниже как df1. Этот столбец должен содержать словарь с местоположениями, определенными в df2 для каждой записи в списке столбца df1.

Хотя я понятия не имею, зачем вам это нужно, и, конечно же, буду искать лучший способ достижения ваших конечных целей, я бы поступил так:

Дано:

dt1in = [[['Data1', 'Data2', 'Data3']],
[['Data11', 'Data21', 'Data31']]
]
dt2in =[['Data1', 'location1'],
['Data2', 'location2'],
['Data3', 'location1'],
['Data11', 'location1'],
['Data21', 'location2'],
['Data31', 'location3']
]
import pandas as pd
from collections import defaultdict
df1= pd.DataFrame(data=dt1in, columns=['Col1'])
df2 = pd.DataFrame(data=dt2in, columns=['Data', 'Location'])

Приведенное выше создает df1 и df2, как показано ниже:

дф1:

 Col1
0 [Data1, Data2, Data3]
1 [Data11, Data21, Data31]

дф2:

 Data Location
0 Data1 location1
1 Data2 location2
2 Data3 location1
3 Data11 location1
4 Data21 location2
5 Data31 location3

Затем определите функцию:

def buildDict(vals: list, refDF: pd.DataFrame) -> dict:
rslt = defaultdict(list)
for v in vals:
try:
loc = refDF[refDF['Data'] == v]['Location'].values[0]
rslt[v].append(loc)
except KeyError:
pass
return rslt

Используя функцию buildDict, вы можете выполнить следующее:

df1['Count'] = df1.apply(lambda row: buildDict(row.Col1, df2), axis=1) 

Это приводит к изменению df1, как показано ниже:

 Col1 Count
0 [Data1, Data2, Data3] {'Data1': ['location1'], 'Data2': ['location2'...
1 [Data11, Data21, Data31] {'Data11': ['location1'], 'Data21': ['location...


.icon-soc{position:fixed;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);z-index:999}.icon-soc a{display:block;text-align:center;padding:5px;transition:all.3s ease;color:#fff;font-size:20px}.icon-soc a:hover{color:#000}





//b||1342177279>>=1)c+=c;return a};q!=p&&null!=q&&g(h,n,{configurable:!0,writable:!0,value:q});var t=this;function u(b,c){var a=b.split("."),d=t;a[0]in d||!d.execScript||d.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)a.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c};function v(b){var c=b.length;if(0=c.offsetHeight)a=!1;else{d=c.getBoundingClientRect();var f=document.body;a=d.top+("pageYOffset"in window?window.pageYOffset:(document.documentElement||f.parentNode||f).scrollTop);d=d.left+("pageXOffset"in window?window.pageXOffset:(document.documentElement||f.parentNode||f).scrollLeft);f=a.toString()+","+d;b.b.hasOwnProperty(f)?a=!1:(b.b[f]=!0,a=a

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...