Python 如何用列中的另一列对列中的字符串进行切片

Python 如何用列中的另一列对列中的字符串进行切片,python,pandas,Python,Pandas,我想将A列按B列进行切片,例如:abcde[:1]=A,klmno[:3]=klm 但有两种说法都失败了: df=pd.DataFrame({'A':['abcde','fghij','klmno','pqrst'], 'B':[1,2,3,4]}) TypeError:字符串索引必须是整数 及 新_列返回NaN 尝试获取新的_列: 非常感谢在循环行的方法中需要axis=1: A B new_column 0 abcde 1 a 1 fghij 2

我想将A列按B列进行切片,例如:abcde[:1]=A,klmno[:3]=klm 但有两种说法都失败了:

df=pd.DataFrame({'A':['abcde','fghij','klmno','pqrst'], 'B':[1,2,3,4]})
TypeError:字符串索引必须是整数

新_列返回NaN

尝试获取新的_列:

非常感谢

在循环行的方法中需要axis=1:

      A    B  new_column
0   abcde  1     a
1   fghij  2     fg
2   klmno  3     klm
3   pqrst  4     pqrs
一个不太惯用但通常更快的解决方案是使用zip:

在循环行的方法中,需要axis=1:

      A    B  new_column
0   abcde  1     a
1   fghij  2     fg
2   klmno  3     klm
3   pqrst  4     pqrs
一个不太惯用但通常更快的解决方案是使用zip:

希望这个解决方案对您有所帮助

希望这个解决方案对您有所帮助


@asuschen很高兴它有帮助!普西多姆,你是个天才!对于记录,您还可以使用您的技术指定开始和停止索引。df['new_column']=[A[B:C]代表zipdf.A中的A、B、C,df.start_index df.end_index]@asuschen很高兴这有帮助!普西多姆,你是个天才!对于记录,您还可以使用您的技术指定开始和停止索引。df['new_column']=[A[B:C]表示zipdf.A中的A、B、C,df.start_index df.end_index]
      A    B  new_column
0   abcde  1     a
1   fghij  2     fg
2   klmno  3     klm
3   pqrst  4     pqrs
df['new_column'] = df.apply(lambda r: r.A[:r.B], axis=1)
df
#       A   B   new_column
#0  abcde   1   a
#1  fghij   2   fg
#2  klmno   3   klm
#3  pqrst   4   pqrs
df['new_column'] = [A[:B] for A, B in zip(df.A, df.B)]
df

#       A   B   new_column
#0  abcde   1   a
#1  fghij   2   fg
#2  klmno   3   klm
#3  pqrst   4   pqrs
%timeit df.apply(lambda r: r.A[:r.B], axis=1)
# 1000 loops, best of 3: 440 µs per loop

%timeit [A[:B] for A, B in zip(df.A, df.B)]
# 10000 loops, best of 3: 27.6 µs per loop