我在pandas dataframe中有一个列,其中包含以下内容,
df1["SubBrand_new"] = "".join([x[0] for x in (df1["SubBrand"].str.split())])
我想创建一个新列(SubBrand_new),例如
setActiveRange
我正在使用这段代码,
setActiveSelection
但无法得到我想要的东西。有人可以帮忙吗?
答案 0 :(得分:4)
我们可以用扩展和总和进行拆分,即
df['SubBrand'].str.split(expand=True).apply(lambda x : x.str[0]).fillna('').sum(1)
0 SWM
1 JR
2 CG
dtype: object
答案 1 :(得分:2)
您希望将函数应用于每一行并返回包含其结果的新列。这种操作可以使用.apply()
方法应用,简单的=
归因不会起到作用。根据您的代码精神的解决方案是:
df = pd.DataFrame({'Name': ['Marcus Livius Drussus',
'Lucius Cornelius Sulla',
'Gaius Julius Caesar']})
df['Abrev'] = df.Name.apply(lambda x: "".join([y[0] for y in (x.split())]))
哪个收益
df
Name Abrev
0 Marcus Levius Drussus MLD
1 Lucius Cornelius Sulla LCS
2 Gaius Julius Caesar GJC
修改强>
我将其与其他解决方案进行了比较,认为使用apply()
的{{1}}方法会非常慢。我惊讶地发现它实际上更快。设定:
join()
我发现:
N = 3000000
bank = pd.util.testing.rands_array(3,N)
vec = [bank[3*i] + ' ' + bank[3*i+1] + ' ' + bank[3*i+2] for i in range(N/3)]
df = pd.DataFrame({'Name': vec})