Python groupby删除带条件的行

时间:2018-01-19 14:26:02

标签: python dataset conditional-statements rows

我是python的新手,我有一个问题。

我的原始数据集就像这样: Original dataset

我希望得到:final dataset

所以想法是删除:

  • 单一需求,
  • 每个需求只有一个不同id_user的行。

我设法用Counter()删除单个需求但是我被困在那里: probleme here

我不想手动使用索引,因为我的正确数据集有超过30000行。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Pandas

将数据集加载到数据框中:

我将在此处创建您的数据框:

import pandas as pd
df = pd.DataFrame({'demand':[1,1,2,3,3,3,4,5,6,7,7,7,7,8,8],'id_user':[101,102,101,101,101,101,103,102,101,101,104,104,104,105,105],'invoice':[10,10,10,60,-60,60,10,10,10,20,20,-20,30,10,10]})
print(df)

输出:

    demand  id_user  invoice
0        1      101       10
1        1      102       10
2        2      101       10
3        3      101       60
4        3      101      -60
5        3      101       60
6        4      103       10
7        5      102       10
8        6      101       10
9        7      101       20
10       7      104       20
11       7      104      -20
12       7      104       30
13       8      105       10
14       8      105       10

让我们使用duplicated和布尔索引:

df[df.duplicated(subset=['demand','id_user'],keep=False)]

OR

让我们使用groupbyfilter

df.groupby(['demand','id_user']).filter(lambda x: x.demand.size != 1)

输出数据帧:

    demand  id_user  invoice
3        3      101       60
4        3      101      -60
5        3      101       60
10       7      104       20
11       7      104      -20
12       7      104       30
13       8      105       10
14       8      105       10