以整数形式获取 pandas 数据框行的索引

新手上路,请多包涵

假设一个简单的数据框,例如

    A         B
0   1  0.810743
1   2  0.595866
2   3  0.154888
3   4  0.472721
4   5  0.894525
5   6  0.978174
6   7  0.859449
7   8  0.541247
8   9  0.232302
9  10  0.276566

给定条件,如何检索行的索引值?例如: dfb = df[df['A']==5].index.values.astype(int) 返回 [4] ,但我想得到的只是 4 。这在后面的代码中给我带来了麻烦。

根据某些条件,我希望记录满足该条件的索引,然后选择其中的行。

我试过了

dfb = df[df['A']==5].index.values.astype(int)
dfbb = df[df['A']==8].index.values.astype(int)
df.loc[dfb:dfbb,'B']

获得所需的输出

    A         B
4   5  0.894525
5   6  0.978174
6   7  0.859449

但我得到 TypeError: '[4]' is an invalid key

原文由 durbachit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 435
2 个回答

更容易的是添加 [0] - 选择列表的第一个值与一个元素:

 dfb = df[df['A']==5].index.values.astype(int)[0]
dfbb = df[df['A']==8].index.values.astype(int)[0]


 dfb = int(df[df['A']==5].index[0])
dfbb = int(df[df['A']==8].index[0])

但如果可能某些值不匹配,则会引发错误,因为第一个值不存在。

解决方案是使用 nextiter 如果值不匹配,则获取默认参数:

 dfb = next(iter(df[df['A']==5].index), 'no match')
print (dfb)
4

dfb = next(iter(df[df['A']==50].index), 'no match')
print (dfb)
no match

然后似乎需要减去 1

 print (df.loc[dfb:dfbb-1,'B'])
4    0.894525
5    0.978174
6    0.859449
Name: B, dtype: float64

boolean indexingquery 的另一种解决方案:

 print (df[(df['A'] >= 5) & (df['A'] < 8)])
   A         B
4  5  0.894525
5  6  0.978174
6  7  0.859449

print (df.loc[(df['A'] >= 5) & (df['A'] < 8), 'B'])
4    0.894525
5    0.978174
6    0.859449
Name: B, dtype: float64


 print (df.query('A >= 5 and A < 8'))
   A         B
4  5  0.894525
5  6  0.978174
6  7  0.859449

原文由 jezrael 发布,翻译遵循 CC BY-SA 4.0 许可协议

要回答有关如何将索引作为所需选择的整数的原始问题,以下将起作用:

 df[df['A']==5].index.item()

原文由 dmdip 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题