2016-08-15 8 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

あなたはパラメータexpand=Truesplitを使用して、左側に1 []を追加することができます。

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が必要です:交換用として

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

:私は、次のようにそれをやって好む

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

特に第2のアプローチの大きな説明。どうもありがとうございます – dagg3r

0

新しい列を取得するための,となる。を使用すると、次のようなことができます。

df['A'] = df['A'].str.replace(',','.') 
関連する問題