Pandas Groupby捕获列oupu的第一个值时出错

2024-04-26 07:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

    DOCUMENT_LEDGER_ID  ACTUAL_START_DATE
        376878              2017-02-01
        376880              2017-02-01
        16043792            2017-01-05
        16043792            2017-02-04   

我想把它分组在DOCUMENT_LEDGER_ID上,并想要ACTUAL_START_DATE的第一个值 这就是我的预期输出:

Id          ACTUAL_START_DATE   
376878          2017-02-01        
376880          2017-02-01        
16043792        2017-01-05 

我试过以下方法,但似乎不起作用:

dictToAgg = {}
dictToAgg["ACTUAL_START_DATE"] = "first"
cycleTimeFilteringUnique = cycleTimeFiltering.groupby('DOCUMENT_LEDGER_ID', as_index=False).first()

我得到的结果是:

      Id            ACTUAL_START_DATE   
    376878          2017-02-01        
    376880          2017-02-01        
    16043792        2017-02-04

我也见过类似的问题,但我不能理解我犯的错误。你知道吗


Tags: 数据方法iddateasdocumentstartfirst
1条回答
网友
1楼 · 发布于 2024-04-26 07:19:53

似乎需要分配sort_values的输出,然后聚合first

cols = ["DOCUMENT_LEDGER_ID", "ACTUAL_START_DATE"]
cycleTimeFilteringUnique = (cycleTimeFiltering.sort_values(cols)
                                              .groupby('DOCUMENT_LEDGER_ID', as_index=False)
                                              .first())

一些替代解决方案:

idx = cycleTimeFiltering.groupby("DOCUMENT_LEDGER_ID")['ACTUAL_START_DATE'].idxmin()
cycleTimeFilteringUnique = cycleTimeFiltering.loc[idx]

cols = ["DOCUMENT_LEDGER_ID", "ACTUAL_START_DATE"]
cycleTimeFilteringUnique = (cycleTimeFiltering.sort_values(cols)
                                              .drop_duplicates('DOCUMENT_LEDGER_ID'))

print (cycleTimeFilteringUnique)
   DOCUMENT_LEDGER_ID ACTUAL_START_DATE
0              376878        2017-02-01
1              376880        2017-02-01
2            16043792        2017-01-05

相关问题 更多 >