我有一个pandas数据帧:
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
我见过类似的问题,但我无法理解我犯的错误。
答案 0 :(得分:3)
您似乎需要分配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