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

Ste*_*o_g 7 python string slice dataframe pandas

我有一个 pandas DataFrame 如下:

     col1  col2  col3
0    1     3     ABCDEFG
1    1     5     HIJKLMNO
2    1     2     PQRSTUV
Run Code Online (Sandbox Code Playgroud)

我想添加另一列,该列应该是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
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

my_df['new_col'] = my_df.col3.str.slice(my_df['col1']-1, my_df['col2']-1)
Run Code Online (Sandbox Code Playgroud)

my_df['new_col'] = data['col3'].str[(my_df['col1']-1):(my_df['col2']-1)]
Run Code Online (Sandbox Code Playgroud)

它们都会产生一列NaN,而如果我插入两个数值(即data['col3'].str[1:3]),它就可以正常工作。我检查过,类型是正确的(int64、int64 和 object)。另外,在这样的上下文之外(例如使用 for 循环)我可以完成工作,但我更喜欢利用 DataFrame 的单行程序。我究竟做错了什么?

jez*_*ael 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
Run Code Online (Sandbox Code Playgroud)