簡體   English   中英

如何在熊貓中的另一列中對一列中的字符串進行切片

[英]How to slice strings in a column by another column in pandas

df=pd.DataFrame({'A':['abcde','fghij','klmno','pqrst'], 'B':[1,2,3,4]})

我想按列B對列A進行切片,例如: abcde[:1]=a, klmno[:3]=klm但是兩個語句都失敗了:

df['new_column']=df.A.map(lambda x: x.str[:df.B])
df['new_column']=df.apply(lambda x: x.A[:x.B]) 

TypeError:字符串索引必須是整數

df['new_column']=df['A'].str[:df['B']]

new_column返回NaN

嘗試獲取new_column

      A    B  new_column
0   abcde  1     a
1   fghij  2     fg
2   klmno  3     klm
3   pqrst  4     pqrs

非常感謝

您需要apply方法中的axis=1來遍歷行:

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

不太習慣但通常更快的解決方案是使用zip

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

通過使用zip可能此解決方案對您有所幫助。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM