Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DataFrame:使用列值对另一列中的字符串进行切片_Python_String_Pandas_Dataframe_Slice - Fatal编程技术网

Python DataFrame:使用列值对另一列中的字符串进行切片

Python DataFrame:使用列值对另一列中的字符串进行切片,python,string,pandas,dataframe,slice,Python,String,Pandas,Dataframe,Slice,我有一个熊猫数据框,如下所示: 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 AB

我有一个熊猫数据框,如下所示:

     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)


它们都会导致一列
NaN
,而如果我插入两个数值(即
data['col3'].str[1:3]
),则效果很好。我检查了,类型正确(int64、int64和object)。此外,在这样的上下文之外(例如,使用for循环),我可以完成这项工作,但我更喜欢使用利用数据帧的单行程序。我做错了什么?

使用
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

很高兴你能帮忙!天气真好!
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