2015-03-02 254 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]