somar - python pandas tutorial portugues pdf



agrupe por dataframe pandas e selecione mais recente em cada grupo (4)

Como agrupar valores do dataframe do pandas e selecionar o mais recente (por data) de cada grupo?

Por exemplo, dado um dataframe classificado por data:

    id     product   date
0   220    6647     2014-09-01 
1   220    6647     2014-09-03 
2   220    6647     2014-10-16
3   826    3380     2014-11-11
4   826    3380     2014-12-09
5   826    3380     2015-05-19
6   901    4555     2014-09-01
7   901    4555     2014-10-05
8   901    4555     2014-11-01

Agrupando por id ou produto, e selecionando o mais antigo dá:

    id     product   date
2   220    6647     2014-10-16
5   826    3380     2015-05-19
8   901    4555     2014-11-01

Answer #1

Dado um dataframe classificado por data, você pode obter o que você pede de várias maneiras:

Como isso:

df.groupby(['id','product']).last()

como isso:

df.groupby(['id','product']).nth(-1)

ou assim:

df.groupby(['id','product']).max()

Se você não quiser que id e product apareçam como índice, use groupby(['id', 'product'], as_index=False) . Como alternativa, use:

df.groupby(['id','product']).tail(1)

Answer #2

Eu tive um problema semelhante e acabei usando drop_duplicates vez de groupby .

Parece correr significativamente mais rápido em grandes conjuntos de dados quando comparado com outros métodos sugeridos acima.

df.sort_values(by="date").drop_duplicates(subset=["id"], keep="last")

    id  product        date
2  220     6647  2014-10-16
8  901     4555  2014-11-01
5  826     3380  2015-05-19

Answer #3

Você também pode usar tail com groupby para obter os últimos n valores do grupo:

df.sort_values('date').groupby('id').tail(1)

    id  product date
2   220 6647    2014-10-16
8   901 4555    2014-11-01
5   826 3380    2015-05-19

Answer #4

usar idxmax em groupby e slice df com loc

df.loc[df.groupby('id').date.idxmax()]

    id  product       date
2  220     6647 2014-10-16
5  826     3380 2015-05-19
8  901     4555 2014-11-01




pandas-groupby