获取列中给出的字符串(句子)的第一个字母,并在python中创建一个新列

时间:2017-12-06 14:10:12

标签: python pandas

我在pandas dataframe中有一个列,其中包含以下内容,

df1["SubBrand_new"] = "".join([x[0] for x in (df1["SubBrand"].str.split())])

我想创建一个新列(SubBrand_new),例如

setActiveRange

我正在使用这段代码,

setActiveSelection

但无法得到我想要的东西。有人可以帮忙吗?

2 个答案:

答案 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})