如何根据熊猫中的位置获取子字符串?

时间:2021-01-07 02:59:02

标签: python pandas string dataframe

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

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

我正在尝试获取第三列,该列显示代表列位置中数字的第一列的字母是什么。数据框应该类似于

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

我已经尝试了以下代码,但是,输出并不是我想要的,因为最终表格在第三列方面存在一些错误。

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)

2 个答案:

答案 0 :(得分:2)

让我们试试

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

答案 1 :(得分:0)

您可以同时将 lambda x: 函数应用于所需的输入列,方法是应用于数据框,将 x 传递给数据框和 axis=1。对于每一行,我的方法根据 String 列中的相应值对 Position 中的每个值进行切片:

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