【问题标题】:How find duplicates in Python Pandas DataFrame across parent groups for all children?如何在 Python Pandas DataFrame 中跨父组为所有孩子查找重复项?
【发布时间】:2021-11-17 06:44:09
【问题描述】:

鉴于以下 DataFrame,我如何在所有父母的父母分组中找到重复项?

data = {'buildings': {0: 'mansion', 1: 'mansion', 2: 'house', 3: 'house', 4: 'house', 5: 'apartment', 6: 'apartment', 7: 'apartment', 8: 'apartment', 9: 'apartment', 10: 'apartment', 11: 'apartment', 12: 'condo', 13: 'condo', 14: 'condo', 15: 'condo', 16: 'condo', 17: 'condo'},
'vehicles': {0: 'plane', 1: 'boat', 2: 'small car', 3: 'small car', 4: 'big car', 5: 'small truck', 6: 'big truck', 7: 'big truck', 8: 'big truck', 9: 'big truck', 10: 'big truck', 11: 'big truck', 12: 'condo', 13: 'condo', 14: 'condo', 15: 'condo', 16: 'condo', 17: 'condo'},
'animals': {0: 'plane', 1: 'boat', 2: 'ape', 3: 'fish', 4: 'big car', 5: 'small truck', 6: 'chimp', 7: 'monkey', 8: 'lemur', 9: 'tiger', 10: 'lion', 11: 'jaguar', 12: 'bobcat', 13: 'monkey', 14: 'lemur', 15: 'tiger', 16: 'lion', 17: 'jaguar'},
'Value': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17}}

g = pd.DataFrame(data).groupby(by=['buildings', 'vehicles', 'animals']).sum()
print(g)

输出:

                                   Value
buildings vehicles    animals           
apartment big truck   chimp            6
                      jaguar          11
                      lemur            8
                      lion            10
                      monkey           7
                      tiger            9
          small truck small truck      5
condo     condo       bobcat          12
                      jaguar          17
                      lemur           14
                      lion            16
                      monkey          13
                      tiger           15
house     big car     big car          4
          small car   ape              2
                      fish             3
mansion   boat        boat             1
          plane       plane            0

原谅无意义的数据,但孩子是车辆和动物。建筑物列不是子列,因为它位于第 0 列位置。

我想识别子列中的重复项。在这里,动物子列中有 5 个重复项: 猴子、狐猴、老虎、狮子、美洲虎。

车辆子列中有 0 个重复项。

我正在寻找一个仅由包含 5 个重复项的行组成的数据框。由于这里有 5 个副本,每个副本都有 2 个值,因此输出数据帧应该是 10 行长。

最后,数据框的宽度可能会有所不同。 (这里有 2 个子列,但在另一种情况下可能有多达 10 个子列)。

如果不清楚,我深表歉意。

【问题讨论】:

    标签: python pandas dataframe duplicates pandas-groupby


    【解决方案1】:

    在你的情况下尝试duplicated

    out = g[g.index.get_level_values(2).duplicated(keep=False)]
    Out[294]: 
                                 Value
    buildings vehicles  animals       
    apartment big truck jaguar      11
                        lemur        8
                        lion        10
                        monkey       7
                        tiger        9
    condo     condo     jaguar      17
                        lemur       14
                        lion        16
                        monkey      13
                        tiger       15
    

    【讨论】:

    • 谢谢。这在这种情况下有效,但如果我想尝试查找级别 1 的重复项,我该怎么做?在此示例中将 2 更改为 1 会产生意想不到的结果。我希望有一个空的 DataFrame,因为整个建筑父母没有重复。 (即大卡车只在公寓下面,小卡车只在公寓下面等等)
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2020-05-05
    • 2019-10-14
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 2021-04-22
    • 2018-01-24
    相关资源
    最近更新 更多