熊猫-从另一列中删除具有最高价值的重复行

卡尔

我有一个很大的数据框(超过100列,几十万行),其中许多行包含重复数据。我试图删除重复的行,将具有最大值的行保留在另一列中。

从本质上讲,我是根据时间段将数据分类到各个bin中,因此在整个周期中,由于大多数实体都存在于所有时间段中,因此人们会期望找到很多重复项。但是,不允许的是同一实体在给定时间段内出现多次。

我尝试了python pandas中的方法:删除A列的重复项,并在数据的子集上将B列中具有最大值的行保留在该数据的子集上,并计划与原始数据帧df重组。

示例数据子集:

              unique_id   period_id   liq
index                                   
19            CAN00CE0     199001  0.017610
1903          **USA07WG0** 199001  1.726374
12404         **USA07WG0** 199001  0.090525
13330         USA08DE0     199001  1.397143
14090         USA04U80     199001  2.000716
12404         USA07WG0     199002  0.090525
13330         USA08DE0     199002  1.397143
14090         USA04U80     199002  2.000716

在上面的示例中,我想保留第一个实例(因为liq较高,为1.72),而丢弃第二个实例(liq较低,为0.09)。请注意,在给定的period_id中可以有两个以上的重复项。

我试过了,但是对我来说慢(超过5分钟后我停止了):

def h(x):
    x = x.dropna() #idmax fails on nas, and happy to throw out where liq is na.
    return x.ix[x.liq.idmax()]

df.groupby([‘holt_unique_id’, ‘period_id’], group_keys = False).apply(lambda x: h(x))

我最终做了下面的工作,它比较冗长和丑陋,只抛出了一个重复项,但全部都扔掉了,但这也很慢!考虑到其他类似复杂性操作的速度,我想在这里寻求更好的解决方案。

所以我的要求确实是要修复上面的代码,以便快速,下面给出了指导,如果按照下面的观点,也许我也可以根据索引而不是reset_index / set_index丢弃重复项我采用的方法:

def do_remove_duplicates(df):
    sub_df = df[['period_id', 'unique_id']] 
    grp = sub_df.groupby(['period_id', 'unique_id'], as_index = False)
    cln = grp.apply(lambda x: x.drop_duplicates(cols = 'unique_id'))   #apply drop_duplicates.  This line is the slow bit!
    cln = cln.reset_index()   #remove the index stuff that has been added
    del(cln['level_0'])   #remove the index stuff that has been added
    cln.set_index('level_1', inplace = True)   #set the index back to the original (same as df).
    df_cln = cln.join(df, how = 'left', rsuffix = '_right')   # join the cleaned dataframe with the original, discarding the duplicate rows using a left join.
    return df_cln
安迪·海登(Andy Hayden)

怎么样:

  • 使用最大数据更新所有列。
  • 选择一行(例如第一个)。

由于它已向量化,因此应该更快。

In [11]: g = df.groupby(["unique_id", "period_id"], as_index=False)

In [12]: g.transform("max")
Out[12]:
            liq
index
19     0.017610
1903   1.726374
12404  1.726374
13330  1.397143
14090  2.000716
12404  0.090525
13330  1.397143
14090  2.000716

In [13]: df.update(g.transform("max"))

In [14]: g.nth(0)
Out[14]:
          unique_id  period_id       liq
index
19         CAN00CE0     199001  0.017610
1903   **USA07WG0**     199001  1.726374
13330      USA08DE0     199001  1.397143
14090      USA04U80     199001  2.000716
12404      USA07WG0     199002  0.090525
13330      USA08DE0     199002  1.397143
14090      USA04U80     199002  2.000716

注意:我想在这里首先或最后使用groupby,但是我认为存在一个错误,它们会丢弃您的旧索引,我不认为它们应该...但是,这是可行的。


另一种方法是先切出不等于liq max的那些:

(df[df["liq"] == g["liq"].transform("max")]  #  keep only max liq rows
 .groupby(["unique_id", "period_id"])
 .nth(0)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在每个熊猫数据框行中查找前n个最高价值列的名称

来自分类Dev

熊猫删除对一列具有不同价值的行,但对所有其他列重复

来自分类Dev

熊猫分组类别,等级,从每个类别中获得最高价值?

来自分类Dev

子集多列中具有最高价值的行

来自分类Dev

在条件基于另一列的情况下从熊猫数据框中删除重复项

来自分类Dev

每个主键的熊猫只将具有最大值的行保留在另一列中

来自分类Dev

当另一列在熊猫中具有特定值时,用 NaN 替换列值

来自分类Dev

如何删除熊猫数据框中具有重复的行?

来自分类Dev

在熊猫中找到一列中的共同价值与另一列中的独特价值

来自分类Dev

熊猫:根据另一列的值添加价值

来自分类Dev

熊猫选择行并根据另一列获得最高的列值

来自分类Dev

使用熊猫删除一列中的非数字行

来自分类Dev

熊猫-在另一列中查找哪个ID具有多个对应值

来自分类Dev

在两列之间进行匹配并在熊猫中从另一列中获取价值

来自分类Dev

在熊猫中删除重复的列之一

来自分类Dev

大熊猫在另一列中获得最高频率值

来自分类Dev

熊猫在下面的所有行中乘以另一列

来自分类Dev

熊猫从上一行获取差异比率,并将其值存储在另一列中,并具有多索引

来自分类常见问题

如果在熊猫中删除重复项时,如果一列的值不为None则保留行

来自分类Dev

熊猫根据另一列中的序列重复创建类别列

来自分类Dev

熊猫-在行中的一列中查找重复的条目,在另一列中查找相等的值

来自分类Dev

熊猫迭代从另一在一列行和删除字符串值

来自分类Dev

如何删除熊猫数据框列中与另一列中的单词匹配的单词

来自分类Dev

从熊猫数据框中基于另一列的列的每个列表中删除元素

来自分类Dev

熊猫将重复项放在一列上,而仅将值最频繁的行保留在另一列中

来自分类Dev

熊猫重复价值

来自分类Dev

将多列除以熊猫中的另一列

来自分类Dev

熊猫fillna日期从另一列

来自分类Dev

删除熊猫数据框中所有元素的最佳方法是什么?其中一列中的值在另一列中存在多次。

Related 相关文章

  1. 1

    在每个熊猫数据框行中查找前n个最高价值列的名称

  2. 2

    熊猫删除对一列具有不同价值的行,但对所有其他列重复

  3. 3

    熊猫分组类别,等级,从每个类别中获得最高价值?

  4. 4

    子集多列中具有最高价值的行

  5. 5

    在条件基于另一列的情况下从熊猫数据框中删除重复项

  6. 6

    每个主键的熊猫只将具有最大值的行保留在另一列中

  7. 7

    当另一列在熊猫中具有特定值时,用 NaN 替换列值

  8. 8

    如何删除熊猫数据框中具有重复的行?

  9. 9

    在熊猫中找到一列中的共同价值与另一列中的独特价值

  10. 10

    熊猫:根据另一列的值添加价值

  11. 11

    熊猫选择行并根据另一列获得最高的列值

  12. 12

    使用熊猫删除一列中的非数字行

  13. 13

    熊猫-在另一列中查找哪个ID具有多个对应值

  14. 14

    在两列之间进行匹配并在熊猫中从另一列中获取价值

  15. 15

    在熊猫中删除重复的列之一

  16. 16

    大熊猫在另一列中获得最高频率值

  17. 17

    熊猫在下面的所有行中乘以另一列

  18. 18

    熊猫从上一行获取差异比率,并将其值存储在另一列中,并具有多索引

  19. 19

    如果在熊猫中删除重复项时,如果一列的值不为None则保留行

  20. 20

    熊猫根据另一列中的序列重复创建类别列

  21. 21

    熊猫-在行中的一列中查找重复的条目,在另一列中查找相等的值

  22. 22

    熊猫迭代从另一在一列行和删除字符串值

  23. 23

    如何删除熊猫数据框列中与另一列中的单词匹配的单词

  24. 24

    从熊猫数据框中基于另一列的列的每个列表中删除元素

  25. 25

    熊猫将重复项放在一列上,而仅将值最频繁的行保留在另一列中

  26. 26

    熊猫重复价值

  27. 27

    将多列除以熊猫中的另一列

  28. 28

    熊猫fillna日期从另一列

  29. 29

    删除熊猫数据框中所有元素的最佳方法是什么?其中一列中的值在另一列中存在多次。

热门标签

归档