簡體   English   中英

如何在 pandas 中獲得基於 position 的 substring?

[英]How to get a substring based on position in pandas?

我有一個 pandas dataframe 如下圖所示:

df =pd.DataFrame({'String':['JAIJAOD','ERJTD','AJDIDO','AJDIDO'],'Position':[5,2,nan,4]})

我試圖獲得第三列,它顯示第一列的字母是什么,它代表 Position 列中的數字。 dataframe 應該類似於

df = pd.DataFrame({'String':['JAIJAOD','ERJTD','AJDIDO','AJDIDO'],'Position':[5,2,nan,4],'Letter':['O','J',nan,'D']})

我試過下面的代碼,但是,output 並不是我想要的,因為最終表在第三列有一些錯誤。

third = []
for i, n in zip(df['String'],df['Position']):
      if n >0: #I thought it because the column Position have just floats
         third.append(i[int(n)]
      else:
         third.append(np.nan)
df['Third'] = pd.Series(third)

讓我們試試

df['Letter'] = [x[int(y)] if y==y else np.nan  for x , y in zip(df.String,df.Position) ]
['O', 'J', nan, 'D']

You can apply a lambda x: function to the required input columns simultaneously, by applying to the dataframe, passing x to the dataframe and axis=1 . 對於每一行,我的方法根據Position列中的相應值對String中的每個值進行切片:

df =pd.DataFrame({'String':['JAIJAOD','ERJTD','AJDIDO','AJDIDO'],'Position':[5,2,np.nan,4]})
df['Letter'] = df[df['Position'].notnull()].apply(lambda x: x['String'][int(x['Position'])],axis=1)
df
Out[1]: 
    String  Position Letter
0  JAIJAOD       5.0      O
1    ERJTD       2.0      J
2   AJDIDO       NaN    NaN
3   AJDIDO       4.0      D

暫無
暫無

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

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