【问题标题】:Sort by columns and only keep the first line until next value in column 1按列排序,只保留第一行直到第 1 列中的下一个值
【发布时间】:2019-08-10 07:38:30
【问题描述】:

我有一个大约 10m 行的文件。每行很可能是唯一的,但我按第 1 列、第 2 列然后第 3 列对文件进行排序。

Column 1 = CODE
Column 2 = DATE
Column 3 = AMOUNT

我只想将第一行保留到下一个日期,依此类推。下面是我所拥有的以及我需要的输出的示例。

Original:  
COL1   COL2         COL3  
ABA    2019-01-01   100  
ABA    2019-01-01   111  
ABA    2019-01-02   140  
ABA    2019-01-02   150  
ABA    2019-01-03   200  
ABA    2019-01-03   220  

Ouptut needed:  
COL1   COL2         COL3  
ABA    2019-01-01   100  
ABA    2019-01-02   140  
ABA    2019-01-03   200  

任何人都可以帮助我。试过了

a.drop_duplicates(subset[data.columns[0],data.columns[1],data.columns[2]], keep='first')

【问题讨论】:

  • 什么是a?你的尝试有什么问题?

标签: python pandas sorting duplicates


【解决方案1】:

先尝试 groupby,然后:

a.groupby([data.columns[0],data.columns[1]], as_index=False).first()

【讨论】:

    【解决方案2】:

    您的解决方案几乎是正确的。此版本为修改版:

    >> a.drop_duplicates(subset = [a.columns[0],a.columns[1]], keep='first')
    

    产生:

        COL1    COL2        COL3
    0   ABA     2019-01-01  100
    2   ABA     2019-01-02  140
    4   ABA     2019-01-03  200
    

    解释修改:

    1. 子集是一个命名参数,你可以在drop_duplicates的文档中看到;
    2. 如果第 3 列可以变化,则不应出现在子集参数上。副本应考虑前 2 列;
    3. 您在代码中使用的名称不一致,将 a 和 data 命名为显然相同的对象;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多