首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python将索引映射到用于提取元素的列表列。

Python将索引映射到用于提取元素的列表列。
EN

Stack Overflow用户
提问于 2022-05-05 05:11:00
回答 1查看 33关注 0票数 1

我有一个由作为元素的列表组成的数据框架。另外,我有一个已知索引的列表。现在,我希望提取每行中这些索引中的元素。我的代码:

代码语言:javascript
运行
复制
df = pd.DataFrame({'A':[[7,8],[4,5,NaN],[NaN,1,9]],'match_idx':[1,0,NaN]})
df

      A             match_idx
0   [7, 8]          1
1   [4, 5, nan]     0
2   [nan, 1, 9]     NaN

# in each row, let's find the values located in the match_idx position

目前的解决办法:

代码语言:javascript
运行
复制
df['A_element'] = df.apply(lambda x: x['A'][x['match_idx']] if ~x['match_idx'].isnan() else np.nan,axis=1)

AttributeError: 'float' object has no attribute 'isnan'

预期解决办法:

代码语言:javascript
运行
复制
df = 
      A             match_idx   A_element
0   [7, 8]          1           8
1   [4, 5, nan]     0           4
2   [nan, 1, 9]     NaN         NaN
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-05 05:13:55

对于没有丢失的值,请使用notna将索引转换为整数:

代码语言:javascript
运行
复制
df['A_element'] = [a[int(i)] if pd.notna(i) else np.nan
                               for a, i in zip(df['A'], df['match_idx'])]

或者:

代码语言:javascript
运行
复制
df['A_element'] = df.apply(lambda x: x['A'][int(x['match_idx'])] 
                           if pd.notna(x['match_idx']) else np.nan,axis=1)

print (df)
             A  match_idx  A_element
0       [7, 8]        1.0        8.0
1  [4, 5, nan]        0.0        4.0
2  [nan, 1, 9]        NaN        NaN
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72122215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档