2017-11-17 192 views
1

基于下面的数据框(1),我希望创建一个数据框(2),其中y或z等于2.是否有方法可以方便地执行此操作?根据两个条件选择python数据框中的行

如果我要创建一个仅包含dataframe(1)但不包含dataframe(2)的行的数据框(3),我该如何处理它?

id x y z 
    0 324 1 2 
    1 213 1 1 
    2 529 2 1 
    3 347 3 2 
    4 109 2 2 

...

+0

如果你的问题得到回答,不要忘了[上投票,并接受一个答案(https://开头stackoverflow.com/help/someone-answers)。谢谢。 –

回答

1

您可以轻松创建df2足够使用条件:

df2 = df1[df1.y.eq(2) | df1.z.eq(2)] 

df2 
     x y z 
id   
0 324 1 2 
2 529 2 1 
3 347 3 2 
4 109 2 2 

鉴于df2df1,你可以对指数进行组差异操作,如此:

df3 = df1.iloc[df1.index.difference(df2.index)] 

df3 
     x y z 
id   
1 213 1 1 
0

你可以做到以下几点:

import pandas as pd 

df = pd.read_csv('data.csv') 
df2 = df[(df.y == 2) | (df.z == 2)] 

print(df2) 

结果:

id x y z 
0 0 324 1 2 
2 2 529 2 1 
3 3 347 3 2 
4 4 109 2 2 
+0

请在发布之前阅读已有的答案,我已经在我的答案中介绍了这一点。 https://stackoverflow.com/a/47360167/4909087 –

+0

我没有看到你的答案,因为我正在写我的。我可以将其删除 – sera

+0

如果它是偶然的,这不是问题。只需在发布之前检查:-)如果我们在1-2分钟之内发帖,但是我们之间的差距差不多是8分钟。 –

2
df[df[['y','z']].eq(2).any(1)] 
Out[1205]: 
    id x y z 
0 0 324 1 2 
2 2 529 2 1 
3 3 347 3 2 
4 4 109 2 2 
+0

不错,这会推广到多列。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ谢谢:-) – Wen

+0

谢谢!这种方法很有意义,但是我得到一个错误,说“['y','z']不是标签或索引”。你知道如何解决这个问题吗? – csha

相关问题