我正在使用pandas数据帧,我想对某些列进行过滤,然后只提取满足给定约束的那些行。
以下是我的数据框:
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
df
A B C D
0 foo one -0.575010 -0.271119
1 bar one -0.130209 -0.106217
2 foo two 0.093987 -1.351369
3 bar three -0.403304 0.983619
4 foo two 0.668989 0.249099
5 bar two 1.153876 1.407159
6 foo one 1.453793 -0.347721
7 foo three 0.493562 -0.051688
我想得到B和D列,然后在循环中应用过滤器,以便将我切成的选择性列切换为for col in df.loc[:, ["B", "D"]]
,产生以下输出:
B D
0 one -0.271119
1 one -0.106217
2 two -1.351369
3 three 0.983619
4 two 0.249099
5 two 1.407159
6 one -0.347721
7 three -0.051688
但在此之后,我无法在if语句中应用选择性过滤来获取这些行。因此,最终输出只得到B和D中的行,它们不等于“B”列的“一”值
B D
2 two -1.351369
3 three 0.983619
4 two 0.249099
5 two 1.407159
7 three -0.051688
答案 0 :(得分:3)
选择列后使用query
。
df[['B', 'D']].query('B != "one"')
B D
2 two 0.611362
3 three 0.400219
4 two -0.959443
5 two 1.494226
7 three -1.471558
答案 1 :(得分:3)
def update_coords():
global playerX, playerY
playerX = tank.xcor()
playerY = tank.ycor()
playerHeading = tank.heading()
.loc