繁体   English   中英

Python Pandas-如何获取数据框中一个或多个已过滤行的(iloc)位置

[英]Python Pandas - How to get the (iloc) position of one or more filtered rows in a dataframe

使用这个例子

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')

因为要处理df.iloc[[1,5]] ,我们还必须合并该值,您需要从“ 30 F”中获取5,所以我认为最简单的方法是利用a合并:

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)

但是您可以决定合并后如何删除重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM