查找符合多列条件的行

时间:2019-10-30 15:55:36

标签: python-3.x pandas pandas-groupby

我有一个具有200万行的数据框,其格式如下:

ID   Number
1    30
1    40
1    60
2    10
2    30
3    60

我需要选择编号为30和40的ID(在这种情况下,输出应为1)。

我知道我们可以创建一个仅包含数字30和40的新DF,然后使用groupby来查看哪些ID的数量大于1。但是,有没有办法在groupby语句中同时做这两项呢?

我的代码:

a=df[(df['Number']==30) | (df['Number']==40) ]
b=a.groupby('ID')['Number'].nunique().to_frame(name='tt').reset_index()
b[b['tt'] > 1]

3 个答案:

答案 0 :(得分:2)

使用分组依据filterissubset

s = {30, 40}
df.groupby('ID').filter(lambda x: s.issubset(set(x.Number)))

Out[158]:
   ID  Number
0   1      30
1   1      40
2   1      60

答案 1 :(得分:1)

我将为每个条件创建一个df,然后将它们内部连接:

df1 = df[df.Number == 30][['Number']]
df2 = df[df.Number == 40][['Number']]

df3 = df1.join(df2,how='inner',on='Number')

答案 2 :(得分:1)

我发现Groupby对象的describe()方法返回一个数据帧的事实非常有用。

temp1 = a.groupby("ID").describe()temp2 = a.groupby("ID").describe()["Number"]输出到Jupyter笔记本以查看它们的外观,然后下面的代码(从您的代码开始)应该有意义。

summary = a.groupby("ID").describe()["Number"]
summary.loc[summary["count"] > 1].index