Come utilizzare una lista come criteri di ricerca in un dataframe?

voti
1

Sto cercando di acquisire familiarità con la codifica Python e vorrei chiedere un piccolo aiuto nel seguente compito.

Ho importato due fotogrammi dati da Excel DFA e DFB con i panda. Vorrei contare le partite di ciascuna linea da DFA in DFB. Per fare questo mi sono convertito dfSearch = dfA['Title'].tolist()a passare questo come un elenco di valori da ricercare.

Il mio approccio è il seguente:

for i in searchDF:
    result = dfB['COL1'].count(i)

Poi vorrei aggiungere una nuova colonna in DFA che memorizzare i risultati di ogni linea.

    dfA['FIND_VAL1'] = result

Mi dispiace se questo compito sembra banale, ma io sono completamente nuovo al pitone e raduno bisogno di aiuto.

Dati esempio A:

title 
plane 
house 
car

Dati Esempio B:

title 
aero plane 
household 
luxury cars 
house decorations

Risultato Esempio:

title   Results    
plane     1     
house     2    
car       1
È pubblicato 31/08/2017 alle 13:43
dall'utente
In altre lingue...                            


3 risposte

voti
1

Si potrebbe chiamare str.countin un elenco di comprensione.

dfA['Results'] = [dfB.title.str.count(x).sum() for x in dfA.title]
dfA

   title  Results
0  plane        1
1  house        2
2    car        1

Un elenco di comprensione alternativa utilizzando Python puro sume str.count, come suggerito da Pir :

dfA = dfA.assign(Results=[sum([x.count(y) for x in dfB.title.values.tolist()]) 
                                       for y in dfA.title.values.tolist()])
dfA
   title  Results
0  plane        1
1  house        2
2    car        1

Questo sembra più veloce per i piccoli dati, ma non può scalare pure.

Risposto il 31/08/2017 a 14:52
fonte dall'utente

voti
1

Utilizzare la count ufuncda numpy.core.defchararraycon un po ' numpydi magia di trasmissione.

from numpy.core.defchararray import count

b = dfB.title.values.astype(str)
a = dfA.title.values[:, None]
dfA.assign(Results=count(b, a).sum(1))

   title  Results
0  plane        1
1  house        2
2    car        1

Impostare

dfA = pd.DataFrame(dict(title=['plane', 'house', 'car']))

dfB = pd.DataFrame(dict(
    title=['aero plane', 'household', 'luxury cars', 'house decorations']
))
Risposto il 31/08/2017 a 15:12
fonte dall'utente

voti
0

Desidero in primo luogo provare fusione dei dataframes:

df = pd.merge(dfA, dfB, on = "title")
Risposto il 31/08/2017 a 15:13
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more