2015-03-02 164 views
1

我有一个数据帧X:选择特定指数,从熊猫列对数据帧

x = pd.DataFrame(np.random.randn(3,3), index=[1,2,3], columns=['A', 'B', 'C']) 
x 


     A B C 
1 0.256668 -0.338741 0.733561 
2 0.200978 0.145738 -0.409657 
3 -0.891879 0.039337 0.400449 

,我想选择一堆索引列对来填充新的系列。例如,我可以选择[(1,A),(1,B),(1,A),(3,C)],这将生成一个列表或数组或4个元素的系列:

[0.256668, -0.338741, 0.256668, 0.400449] 

任何想法我应该怎么做?

回答

2

我觉得get_value()lookup()更快:

import numpy as np 
import pandas as pd 
x = pd.DataFrame(np.random.randn(3,3), index=[1,2,3], columns=['A', 'B', 'C']) 

locations = [(1, "A"), (1, "B"), (1, "A"), (3, "C")] 

print x.get_value(1, "A") 

row_labels, col_labels = zip(*locations) 
print x.lookup(row_labels, col_labels) 
1

使用ix应该能够找到在数据帧中的元素,像这样:

import pandas as pd 

# using your data sample 
df = pd.read_clipboard() 

df 
Out[170]: 
      A   B   C 
1 0.256668 -0.338741 0.733561 
2 0.200978 0.145738 -0.409657 
3 -0.891879 0.039337 0.400449 

# however you cannot store A, B, C... as they are undefined names 
l = [(1, 'A'), (1, 'B'), (1, 'A'), (3, 'C')] 

# you can also use a for/loop, simply iterate the list and LOCATE the element 
map(lambda x: df.ix[x[0], x[1]], l) 
Out[172]: [0.25666800000000001, -0.33874099999999996, 0.25666800000000001, 0.400449]