[英]Group By Customer Id and Also Take Date Column With Most Recent Value In Pandas
[英]Pandas: Group by Name and Take Row With Most Recent Date
我有一個帶有A, B, C, D, date
列的Pandas DataFrame。 我想過濾掉A
和B
重復項,使行中的值保持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()
我得到的大部分都是我想要的,但是我丟失了D
和C
列...
你可以做
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.