![](/img/trans.png)
[英]python pandas multiIndex Dataframe, how to select one level based on 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.