Pandas从另一列的字符串切片创建新列

时间:2014-09-11 13:59:15

标签: python pandas

我想在Pandas中使用为数据框中的另一列切片的字符串创建一个新列。

例如。

Sample  Value  New_sample
AAB     23     A
BAB     25     B

其中New_sample是由[:1]

的简单Sample切片组成的新列

我尝试了很多事情无济于事 - 我觉得我错过了一些简单的事情。

最有效的方法是什么?

3 个答案:

答案 0 :(得分:45)

您可以调用str方法并应用切片,这将比其他方法快得多,因为这是矢量化的(感谢@unutbu):

df['New_Sample'] = df.Sample.str[:1]

您也可以在df上调用lambda函数,但在较大的数据帧上这会变慢:

In [187]:

df['New_Sample'] = df.Sample.apply(lambda x: x[:1])
df
Out[187]:
  Sample  Value New_Sample
0    AAB     23          A
1    BAB     25          B

答案 1 :(得分:3)

您还可以使用slice()来对Series的字符串进行切片,如下所示:

df['New_sample'] = df['Sample'].str.slice(0,1)

来自pandas documentation

  

Series.str.slice(start = None,stop = None,step = None)

     
    

系列/索引中每个元素的切片子字符串

  

对于切片索引(如果索引为字符串类型,则为),您可以尝试:

df.index = df.index.str.slice(0,1)

答案 2 :(得分:3)

在切片宽度随数据帧行的变化而变化时,为常见变化添加解决方案:

#--Here i am extracting the ID part from the Email (i.e. the part before @)

#--First finding the position of @ in Email
d['pos'] = d['Email'].str.find('@')

#--Using position to slice Email using a lambda function
d['new_var'] = d.apply(lambda x: x['Email'][0:x['pos']],axis=1)

#--Imagine x['Email'] as a string on which, slicing is applied

希望这会有所帮助!