2012-08-08 15 views
47

ho un seguenti DataFrame:Pandas: Combina corda e int colonne

from pandas import * 
df = DataFrame({'foo':['a','b','c'], 'bar':[1, 2, 3]}) 

Ecco come si presenta:

bar foo 
0 1 a 
1 2 b 
2 3 c 

Ora voglio avere qualcosa di simile:

 bar 
0 1 is a 
1 2 is b 
2 3 is c 

Come posso raggiungere questo obiettivo? Ho provato quanto segue:

df['foo'] = '%s is %s' % (df['bar'], df['foo']) 

ma mi dà un risultato sbagliato:

>>>print df.ix[0] 

bar             a 
foo 0 a 
1 b 
2 c 
Name: bar is 0 1 
1 2 
2 
Name: 0 

Scusate una domanda stupida, ma questo pandas: combine two columns in a DataFrame non era utile per me.

risposta

81

df['bar'] = df.bar.map(str) + " is " + df.foo.

32

Il problema nel codice è che si desidera applicare l'operazione su ogni riga. Il modo in cui lo hai scritto prende tutte le colonne "bar" e "pippo", le converte in stringhe e ti restituisce una grande stringa. È possibile scrivere le cose come:

df.apply(lambda x:'%s is %s' % (x['bar'],x['foo']),axis=1) 

E 'più lungo rispetto agli altri risposta, ma è più generico (può essere utilizzato con valori che non sono stringhe).

9

Si potrebbe anche usare

df['bar'] = df['bar'].str.cat(df['foo'].values.astype(str), sep=' is ') 
3
df.astype(str).apply(lambda x: ' is '.join(x), axis=1) 

0 1 is a 
1 2 is b 
2 3 is c 
dtype: object 
Problemi correlati