Pandas基于拆分另一列添加新列

dag*_*g3r 5 python split multiple-columns dataframe pandas

我有一个像下面这样的pandas数据帧:

A              B
US,65,AMAZON   2016
US,65,EBAY     2016
Run Code Online (Sandbox Code Playgroud)

我的目标是看起来像这样:

A              B      country    code    com
US.65.AMAZON   2016   US         65      AMAZON
US.65.AMAZON   2016   US         65      EBAY
Run Code Online (Sandbox Code Playgroud)

我知道在这里这里之前已经问过这个问题,但它们都不适合我.我试过了:

df['country','code','com'] = df.Field.str.split('.')
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么吗?任何帮助深表感谢.

jez*_*ael 7

您可以使用split参数expand=True[]在左侧添加一个:

df[['country','code','com']] = df.A.str.split(',', expand=True)
Run Code Online (Sandbox Code Playgroud)

然后到: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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

您也可以在构造函数中使用列名,但这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
Run Code Online (Sandbox Code Playgroud)