2017-08-31 45 views
0

我想知道是否有直接的方式將元組列表(row_index,column_index)傳遞給數據幀函數以便檢索這些行中的數據和列索引?我確實想過使用列表理解,但我想知道熊貓是否沒有整合的東西?通過索引使用元組列表檢索數據從數據框

將row_indexes的有序列表和column_indexes的有序列表傳遞給loc僅僅檢索交集的集合;所以壓縮是無用的,結果是不相關的。

例如,對於

df = pd.DataFrame ([[[0,1,2,3],[0,9,8,7]],[[0,1,8,3],[0,4,8,7]]],\ 
     index=["r0","r1"], columns =["c0","c1"]) 

,如果我有列表l= [("r0","c0"),("r0","c1"),("r1","c1")] 我的確可以使用列表理解

[df[r,c] for r,c in l] 

但我想我曾經那麼通過這樣一個名單的可能性df或數組以一種方式檢索相同的結果。 我弄錯了嗎?

提前致謝。

+0

這是無效的數據幀結構代碼。請修復它。 –

+0

對不起,我忘了一些支撐 –

回答

2

也許你正在尋找lookup

import pandas as pd 

df = pd.DataFrame ([[0,1,2,3],[0,9,8,7]], index=["r0","r1"], columns =["c0","c1","c2","c3"]) 
l= [("r0","c0"),("r0","c1"),("r1","c1")] 
print(df.lookup(*zip(*l))) 

產生

[0 1 9] 
1

使用melt

DF=df.reset_index().melt('index') 
DF['Match']=list(zip(DF['index'], DF['variable'])) 
DF.value[DF.Match.isin(l)] 

Out[249]: 
0 0 
2 1 
5 8 
Name: value, dtype: int64 

數據輸入

df = pd.DataFrame([[0, 1, 2, 3], [0, 9, 8, 7]], index = ["r0", "r1"]) 

l= [("r0",0),("r0",1),("r1",2)]