2016-04-26 17 views
5

Domanda semplice e pratica, ma non riesco a trovare una soluzione.Copia la riga DataFrame dei panda su più righe

Le domande che ho preso uno sguardo sono stati i seguenti:

Modifying a subset of rows in a pandas dataframe

Changing certain values in multiple columns of a pandas DataFrame at once

Fastest way to copy columns from one DataFrame to another using pandas?

Selecting with complex criteria from pandas.DataFrame

La differenza fondamentale tra questi e il mio è che non ho bisogno di inserire un singolo valore, ma una riga.

Il mio problema è, prendo una fila di un dataframe, diciamo df1. Quindi ho una serie.

Ora ho questo altro dataframe, df2, che ho selezionato più righe in base a un criterio, e voglio replicare quella serie a tutte quelle righe.

df1:

Index/Col A B C 
1   0 0 0 
2   0 0 0 
3   1 2 3 
4   0 0 0 

DF2:

Index/Col A B C 
1   0 0 0 
2   0 0 0 
3   0 0 0 
4   0 0 0 

Quello che voglio realizzare è l'inserimento di df1 [3] nelle linee dF2 [2] e DF3 [3], per esempio. Quindi, qualcosa come il codice non lavoro:

series = df1[3] 
df2[df2.index>=2 and df2.index<=3] = series 

ritorno

DF2:

Index/Col A B C 
1   0 0 0 
2   1 2 3 
3   1 2 3 
4   0 0 0 

risposta

7

Usa loc e passare un elenco delle etichette di indice di interesse, dopo il seguente comma della : indica che vogliamo impostare tutti i valori di colonna, quindi assegniamo la serie, ma chiamiamo l'attributo .values in modo che sia una matrice numpy. In caso contrario, si otterrà un ValueError come ci saranno una mancata corrispondenza forma come avete intenzione di sovrascrivere 2 file con una sola riga e se è un Series allora non allineare come volete:

In [76]: 
df2.loc[[2,3],:] = df1.loc[3].values 
df2 

Out[76]: 
    A B C 
1 0 0 0 
2 1 2 3 
3 1 2 3 
4 0 0 0 
+0

ok suona bene. Un paio di domande, la parte destra funziona se si tratta di una serie? puoi modificare in modo che la selezione condizionale venga presa in considerazione? –

+0

No, come ho affermato se provi a ottenere una mancata corrispondenza di forma 'ValueError'. Funzionerebbe solo se hai passato un 'Serie' della stessa forma e se i valori dell'indice corrispondono a – EdChum

+0

o capito. Grazie ! –

0

supporti copiare determinate righe e colonne dal dataframe in qualche altro frame di dati. code

df2 = df.loc[x:y,a:b] // x and y are rows bound and a and b are column 
           bounds that you have to select 
Problemi correlati