2016-08-15 211 views
3

我有一个熊猫数据框类似如下:熊猫基于分裂添加新列的另一列

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

我的目标是去是这样的:

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

我知道这个问题有之前询问过herehere但是没有他们为我工作。我曾尝试:

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

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

我缺少的东西?任何帮助深表感谢。

回答

3

可以使用split与参数expand=True,并添加一个[]到左侧:

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

然后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 

DataFrame构造另一种解决方案,如果没有NaN值:

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 

您也可以在构造函数中使用的列名,但随后concat是必要的:

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

很好的解释,特别是第二种方法。非常感谢 – dagg3r

0

为了获得新的栏目,我宁愿做如下:

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]) 

至于更换您可以使用以下:

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