gpt4 book ai didi

python - 删除 Pandas Dataframe 中按其他列分组的列中频率最低的行

转载 作者:行者123 更新时间:2023-12-04 12:58:18 25 4
gpt4 key购买 nike

我有一个带有 的 Pandas 数据框不一致的行 .在下面的例子中 key1key2是两个放在一起的值必须是唯一的,所以这对夫妇 (key1 ,key2)是主键,应该在数据框中出现一次,而 info(key1 ,key2)的二进制信息并且可能是 TF .不幸的是(key1 ,key2)在数据框中重复,有时它们有 info=T其他时间 info=F ,这显然是一个错误。
为了消除重复,我想采用这个推理:我想计算多少次(对于同一对夫妇 (key1 ,key2))infoT和多少次infoF

  • 如果频率不同(大部分时间)保持
    只有具有最频繁值
    的行之一之间TF具有类似 df.drop_duplicates(subset = ["key1","key2"] , keep = "first") 的功能其中first应该是
    最频繁值 info 的行.
  • 如果取而代之的是 50%
    行有 info=T 50% 有 info=F ,我要删除所有
    他们
    ,因为我不知道哪个是正确的函数
    喜欢 df.drop_duplicates(subset = ["key1","key2"] , keep = False) .

  • 我不知道如何进行这种过滤器,因为我想在一种情况下保留 1 行,在另一种情况下保留 0 行,具体取决于相似行组中特定列的值。
    期望的行为
    在:
         key1  key2    info
    0 a1 a2 T
    1 a1 a2 T #duplicated row of index 0
    2 a1 a2 F #similar row of indexes 0 and 1 but inconsistent with info field
    3 b1 b2 T
    4 b1 b2 T #duplicated row of index 3
    5 b1 b3 T #not duplicated since key2 is different from indexes 3 and 4
    6 c1 c2 T
    7 c1 c2 F #duplicated row of index 5 but inconsistent with info field
    出去:
         key1  key2     info
    0 a1 a2 T # for(a1,a2) T:2 and F:1
    3 b1 b2 T # for(b1,b2) T:2 and F:0
    5 b1 b3 T # for(b1,b3) T:1 and F:0
    # no rows for (c1,c2) because T:1 and F:1
    谢谢

    最佳答案

    groupby并使用 pd.Series.mode获取模态值。 pd.Series.mode 将在关系的情况下返回模式,因此这允许我们使用 drop_duplicates 删除这些情况。因为我们期望每个唯一的 ['key1', 'key2'] 只有一种模式.

    import pandas as pd

    (df.groupby(['key1', 'key2'])['info']
    .apply(pd.Series.mode)
    .reset_index()
    .drop_duplicates(['key1', 'key2'], keep=False)
    .drop(columns='level_2')
    )

    # key1 key2 info
    #0 a1 a2 T
    #1 b1 b2 T
    #2 b1 b3 T
    groupby的结果+ mode是:
    key1  key2   
    a1 a2 0 T
    b1 b2 0 T
    b3 0 T
    c1 c2 0 F # Tied mode so it gets 2 rows with the last
    1 T # index level indicating the # of items tied for mode.

    关于python - 删除 Pandas Dataframe 中按其他列分组的列中频率最低的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63060835/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com