我有一个包含(a,b,c)
列的数据框。
我有一个值列表(x,y,z)
如何选择包含这三个值的行,如:
df = df[df[(a,b,c)] == (x,y,z)]
我知道
df = df[(df[a] == x) & (df[b] == y) & (df[c] == z)]
应该可行,但我正在寻找更方便的东西。它存在吗?
答案 0 :(得分:2)
我会将列设置为索引并使用.loc
函数
像这样的索引是访问行的最快方法,而对于较大的数据集,屏蔽速度非常慢。
In [4]: df = pd.DataFrame({'a':[1,2,3,4,5],
'b':['a','b','c','d','e'],
'c':['z','x','y','v','u'],
'othervalue':range(100, 105)})
In [5]: df
Out[5]:
a b c othervalue
0 1 a z 100
1 2 b x 101
2 3 c y 102
3 4 d v 103
4 5 e u 104
In [6]: df.set_index(['a','b','c'], inplace=True)
In [7]: df
Out[7]:
othervalue
a b c
1 a z 100
2 b x 101
3 c y 102
4 d v 103
5 e u 104
In [8]: df.loc[[4,'d','v']]
Out[8]:
othervalue
a b c
4 d v 103
此外,如果您只想访问特定列的某个值,则可以扩展.loc
函数以访问该特定列,如下所示:
In [9]: df.loc[[4,'d','v'], 'othervalue']
Out[9]:
a b c
4 d v 103
Name: othervalue, dtype: int64
答案 1 :(得分:1)
如果你正在寻找匹配元组(x,y,z)
值而不管列中的顺序(只是在同一行),也许我会使用isin作为:
df = df[df[['a','b','c']].isin([x,y,z])].dropna()
将时间与大数据帧上的布尔掩码进行比较会很好。
答案 2 :(得分:0)
df = [df['a'],df['b'],df['c']] == [x,y,z]
希望它会有所帮助