通过使用元组列表建立索引来从数据框中检索数据

时间:2017-08-31 17:30:29

标签: python list pandas indexing tuples

我想知道是否有直接方式将元组列表(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或数组。 我错了吗?

先谢谢。

2 个答案:

答案 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 :(得分: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)]