使用此示例
df = pd.DataFrame({'letters':
['A', 'B', 'C', 'D', 'E', 'F']},
index=[10, 20, 30, 40, 50, 30])
使用 df.iloc [x],我可以获取数据框中的行x。例如。
df.iloc[3]
返回
字母D 名称:40,dtype:对象
当我像过滤数据框一样
df2 = df.iloc[1:3]
我买了df2
letters
20 B
30 C
现在假定我不知道如何应用过滤器,我需要找出过滤后的行(1和2)的值。
获取职位列表的最佳方法是什么,它使我可以使用 df.iloc 通过原始数据框访问类似此结果的过滤结果?如何获得职位编号?
我正在寻找结果
[1, 2]
注意:我有一个很好的建议:
df.index.get_indexer_for((df2.index))
如果索引不是唯一的,则不起作用。
Int64Index([1, 2, 5], dtype='int64')
答案 0 :(得分:0)
因为如果要处理df.iloc[[1,5]]
之类的情况(我们需要从“ 30 F”中获取5),我们也必须合并该值,我认为最简单的方法是利用合并:
In [172]: df.reset_index().reset_index().merge(df.iloc[1:3].reset_index())
Out[172]:
level_0 index letters
0 1 20 B
1 2 30 C
In [173]: df.reset_index().reset_index().merge(df.iloc[1:3].reset_index())["level_0"].values
Out[173]: array([1, 2], dtype=int64)
In [174]: df.reset_index().reset_index().merge(df.iloc[[1,5]].reset_index())
Out[174]:
level_0 index letters
0 1 20 B
1 5 30 F
In [175]: df.reset_index().reset_index().merge(df.iloc[[1,5]].reset_index())["level_0"].values
Out[175]: array([1, 5], dtype=int64)
如果由于重复的行而无法唯一地恢复原始头寸,您将得到所有这些头寸:
In [179]: df.iloc[-1, 0] = "C"
In [180]: df.reset_index().reset_index().merge(df.iloc[[1,2]].reset_index())
Out[180]:
level_0 index letters
0 1 20 B
1 2 30 C
2 5 30 C
In [181]: df.reset_index().reset_index().merge(df.iloc[[1,2]].reset_index())["level_0"].values
Out[181]: array([1, 2, 5], dtype=int64)
但是您可以决定合并后如何删除重复项。