Ottenere la prima e l'ultima occorrenza di un valore duplicato

0

Domanda

Ho un dataframe come questo

index    col1     col2    col3    col4
  0      11/20    11/26   abc     35
  1      11/21    11/24   xxx     30
  2      11/22    11/27   abc     20

Qui col3 ha lo stesso valore (duplicati in base al valore). Io sum() col4 da righe in base al col3 valore.

Quindi in questo caso posso fare

df = df.groupby(['col3'])[['col4']].sum()

Ma con questo approccio ho

index    col3    col4
  0      abc     55
  1      xxx     30

Vorrei essere in grado di conservare la prima occorrenza del duplicato del valore col1(11/20) e l'ultima occorrenza di col2(11/27), in modo che il prodotto finale assomigli

index    col1     col2    col3    col4
  0      11/20    11/27   abc     55
  1      11/21    11/24   xxx     30

pandas python
2021-11-24 05:23:58
2

Migliore risposta

2

Un modo utilizzando pandas.DataFrame.groupby.agg:

new_df = df.groupby("col3", as_index=False).agg({"col1": "first",
                                                 "col2": "last",
                                                 "col4": "sum"})
print(new_df)

Output:

  col3   col1   col2  col4
0  abc  11/20  11/27    55
1  xxx  11/21  11/24    30
2021-11-24 05:27:44

La conversione di col1/col2 datetime e utilizzando min/max potrebbe essere più robusto se vogliamo sempre "prima" (il più antico) data e l ' "ultima" (più recenti) data. (Di nuovo, questo dipende dal caso d'uso)
Henry Ecker
0

Panda fornisce first e last aggregazioni.

2021-11-24 05:28:04

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................