我有一个超过200万array
的n int
:
a = np.array([324, 986, 574 ... 986, 1232, 3943])
a
中的每个元素都对应于数据框df
中具有形状(1324,4)的索引值:
index A B C D
0 'foo' 2 3 2
1 'bar' 2 4 8
...
1323 'foo' 2 5 8
我正在尝试使用列表解析来访问df.A
的值:
l = [df.A.loc[i] for i in a]
但这需要很长时间才能运行。有更快的选择;也许我需要做一个join?谢谢。
答案 0 :(得分:4)
如果a
中的值与数据框索引中的值相对应,则应该只能使用.loc[a]
;如果a
中的值指的是位置,那么您需要.iloc[a]
;如果您需要numpy数组作为结果,如@Scott所评论,请使用df.A.loc[a].values
:
df.A.loc[a]
实施例:
df = pd.DataFrame({
"A": ["a", "c", "b", "d"]
})
a = np.array([0,3,2,2,1,1,0])
df.A.loc[a]
#0 a
#3 d
#2 b
#2 b
#1 c
#1 c
#0 a
#Name: A, dtype: object
df.A.loc[a].values
# array(['a', 'd', 'b', 'b', 'c', 'c', 'a'], dtype=object)
答案 1 :(得分:1)
这可以通过布尔索引来完成:
a = np.array([324, 986, 574, 986, 1232, 3943])
df
some_column
0 1
1 2
2 3
3 5
4 324
5 574
6 986
7 3943
df[df['some_column'].isin(a)]
some_column
4 324
5 574
6 986
7 3943
df[df['some_column'].isin(a)].values
array([[ 324],
[ 574],
[ 986],
[3943]], dtype=int64)
同样,如果数组值与索引相对应:
df[df.index.isin(a)]