Pandas DataFrame:使用列值来切分另一列中的字符串

7

I have a pandas DataFrame as follow:

     col1  col2  col3
0    1     3     ABCDEFG
1    1     5     HIJKLMNO
2    1     2     PQRSTUV

我希望添加另一列,它应该是col3的子字符串,从col1指示的位置到col2指示的位置。类似于col3[(col1-1):(col2-1)],这将导致:

     col1  col2  col3       new_col
0    1     3     ABCDEFG    ABC
1    1     5     HIJKLMNO   HIJK
2    1     2     PQRSTUV    PQ

我尝试了以下内容:

my_df['new_col'] = my_df.col3.str.slice(my_df['col1']-1, my_df['col2']-1)

并且

my_df['new_col'] = data['col3'].str[(my_df['col1']-1):(my_df['col2']-1)]

两种情况都导致一个NaN的列,但如果我插入两个数字值(如data['col3'].str[1:3]),它可以正常工作。 我检查了类型(int64,int64和object),也在此上下文之外(例如使用for循环)可以完成工作,但我更喜欢利用DataFrame的一行代码。 我做错了什么?

1个回答

5

使用apply,因为每行都必须单独处理:

my_df['new_col'] = my_df.apply(lambda x: x['col3'][x['col1']-1:x['col2']], 1)  
print (my_df)
   col1  col2      col3 new_col
0     1     3   ABCDEFG     ABC
1     1     5  HIJKLMNO   HIJKL
2     1     2   PQRSTUV      PQ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接