2016-08-15 2 views
3

ich Pandas Datenrahmen wie die folgende haben:Pandas fügen Sie neue Spalten basierend auf Splitting eine andere Spalte

A    B 
US,65,AMAZON 2016 
US,65,EBAY  2016 

Mein Ziel ist es so aussehen zu bekommen:

A    B  country code com 
US.65.AMAZON 2016 US   65  AMAZON 
US.65.AMAZON 2016 US   65  EBAY 

Ich weiß, diese Frage hat vor here und here gefragt worden aber keine von ihnen funktioniert für mich. Ich habe versucht:

df['country','code','com'] = df.Field.str.split('.') 

und

df2 = pd.DataFrame(df.Field.str.split('.').tolist(),columns = ['country','code','com','A','B']) 

Bin ich etwas fehlt? Jede Hilfe wird sehr geschätzt.

Antwort

3

können Sie verwenden split mit dem Parameter expand=True und ein [] auf der linken Seite hinzufügen:

df[['country','code','com']] = df.A.str.split(',', expand=True) 

Dann replace,-.:

df.A = df.A.str.replace(',','.') 

print (df) 
       A  B country code  com 
0 US.65.AMAZON 2016  US 65 AMAZON 
1 US.65.EBAY 2016  US 65 EBAY 

Eine andere Lösung mit DataFrame Konstruktor, wenn es keine NaN Werte :

df[['country','code','com']] = pd.DataFrame([ x.split(',') for x in df['A'].tolist() ]) 
df.A = df.A.str.replace(',','.') 
print (df) 
       A  B country code  com 
0 US.65.AMAZON 2016  US 65 AMAZON 
1 US.65.EBAY 2016  US 65 EBAY 

Auch können Sie Spaltennamen in Konstruktor verwenden, aber dann concat notwendig:

df1=pd.DataFrame([x.split(',') for x in df['A'].tolist()],columns= ['country','code','com']) 
df.A = df.A.str.replace(',','.') 
df = pd.concat([df, df1], axis=1) 
print (df) 
       A  B country code  com 
0 US.65.AMAZON 2016  US 65 AMAZON 
1 US.65.EBAY 2016  US 65 EBAY 
+0

Große Erklärung speziell für den zweiten Ansatz. Ich danke dir sehr – dagg3r

0

Für die neuen Spalten bekommen würde ich es vorziehen, es wie folgt:

df['Country'] = df['A'].apply(lambda x: x[0]) 
df['Code'] = df['A'].apply(lambda x: x[1]) 
df['Com'] = df['A'].apply(lambda x: x[2]) 

Wie für den Ersatz von , mit einem . können Sie Folgendes verwenden:

df['A'] = df['A'].str.replace(',','.') 
Verwandte Themen