我有一个列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
列...
答案 0 :(得分:1)
您可以使用
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
答案 1 :(得分:0)
尝试df.groupby(['A', 'B']).agg(lambda x: x.iloc[x['date'].argmax()])
熊猫有自己的日期对象。也许熊猫对系列名称感到困惑。
答案 2 :(得分:0)
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
分组 d删除重复项:
df.groupby(['A', 'B']).agg(
{
'date': 'max'
})
输出:
date
A B
1 1 1/1/18
这应该有效。将'date'列用作datetime对象可能会更好。