簡體   English   中英

熊貓:按名稱分組並以最近的日期進行排序

[英]Pandas: Group by Name and Take Row With Most Recent Date

我有一個帶有A, B, C, D, date列的Pandas DataFrame。 我想過濾掉AB重復項,使行中的值保持date

因此,如果我有兩行看起來像:

A B C D date

1 1 2 3 1/1/18

1 1 2 3 1/1/17

正確的輸出為:

A B C D date

1 1 2 3 1/1/18

我可以通過遍歷來做到這一點,但是我想使用df.groupby(['A', 'B']) ,然后通過取每個組中date最大值來進行匯總。

我試過了:

df.groupby(['A', 'B']).agg(lambda x: x.iloc[x.date.argmax()])

但是我得到:

AttributeError: 'Series' object has no attribute 'date'

知道我做錯了什么嗎?

編輯:嗯,如果我這樣做:

df.groupby(['A', 'B']).UPDATED_AT.max()

我得到的大部分都是我想要的,但是我丟失了DC列...

你可以做

df.date=pd.to_datetime(df.date)
df.sort_values('date').drop_duplicates(['A','B'],keep='last')
   A  B  C  D       date
0  1  1  2  3 2018-01-01

嘗試df.groupby(['A', 'B']).agg(lambda x: x.iloc[x['date'].argmax()])熊貓有自己的日期對象。 也許熊貓對系列名稱感到困惑。

df = pd.DataFrame([[1, 1, 2, 3, '1/1/18'],
                    [1, 1, 2, 3, '1/1/17']], 
                    columns=['A', 'B', 'C', 'D', 'date'])

輸出:

    A   B   C   D   date
0   1   1   2   3   1/1/18
1   1   1   2   3   1/1/17

分組和刪除重復項:

df.groupby(['A', 'B']).agg(
    {
        'date': 'max'
    })

輸出:

        date
A   B   
1   1   1/1/18

這應該工作。 將'date'列用作datetime對象可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM