У меня есть два кадра данных 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
Комментариев нет:
Отправить комментарий