获取列中给定的字符串(句子)的第一个字母,然后用python创建一个新列

2024-09-19 23:37:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas dataframe中有一个列,它有如下项:

SubBrand
Sam William Mathew
Jonty Rodes
Chris Gayle

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

^{pr2}$

我在用这段代码

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

但没能得到我想要的东西。有人能帮忙吗?在


Tags: 代码dataframepandasnewsamchrisdf1join
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())]))

它产生了

^{pr2}$

编辑:

我将它与另一个解决方案进行了比较,认为带有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})

我发现:

^{4}$

我们可以用展开和求和来进行拆分,即

df['SubBrand'].str.split(expand=True).apply(lambda x : x.str[0]).fillna('').sum(1)

0    SWM
1     JR
2     CG
dtype: object

相关问题 更多 >