熊猫多重分组和过滤

时间:2020-10-09 11:14:24

标签: python pandas

我有这个DataFrame:

df = pd.DataFrame(np.array([
        [1, 'Black', 233, 342],
        [1, 'White', 342, 1222],
        [1, 'Orange', 432, 1234],
        [1, 'Orange', 2234, 1345],
        [1, 'Orange', 2234, 1345],
        [2, 'Pink', 444, 222],
        [2, 'White', 35345, 2345434],
        [3, 'Black', 4544, 2222],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
]), columns=['ID', 'TITLE', 'ITEM_ID', 'CARD_ID'])
   ID   TITLE ITEM_ID  CARD_ID
0   1   Black     233      342
1   1   White     342     1222
2   1  Orange     432     1234
3   1  Orange    2234     1345
4   1  Orange    2234     1345
5   2    Pink     444      222
6   2   White   35345  2345434
7   3   Black    4544     2222
8   4   White    4433      123
9   4   White    4433      123
10  4   White    4433      123
11  4   White    4433      123
12  4   White    4433      123
13  4   White    4433      123

我只想获取具有相同ID但不同TITLE的行(当TITLE当然超过一个,并删除重复的TITLE时):

   ID   TITLE ITEM_ID  CARD_ID
0   1   Black     233      342
1   1   White     342     1222
2   1  Orange     432     1234
5   2    Pink     444      222
6   2   White   35345  2345434

请帮帮我。

1 个答案:

答案 0 :(得分:1)

ID分组,删除TITLE中唯一值计数为1的行;之后,您可以删除重复项。

(df.loc[df.groupby("ID")
          .TITLE
          .transform("nunique")
          .gt(1)]
   .drop_duplicates(["ID", "TITLE"])
  )



    ID  TITLE   ITEM_ID     CARD_ID
0   1   Black   233     342
1   1   White   342     1222
2   1   Orange  432     1234
5   2   Pink    444     222
6   2   White   35345   2345434