Wenn Sie Duplikate mit Pandas löschen oder aggregieren möchten, können Sie drop_duplicates oder groupby verwenden.
So entfernen Sie doppelte Elemente in Pandas DataFrame oder Series Python Verwendung von Pandas groupby
Es gibt jedoch Zeiten, in denen ich jeder Gruppe eine group_id unter den gleichen Bedingungen wie bei groupby geben möchte, aber ich wusste nicht, wie es geht, also habe ich es implementiert. (Es ist möglicherweise nicht die beste Vorgehensweise, aber es war einfach zu implementieren.)
#Pandas importieren
import pandas as pd
#Datenrahmen vorbereiten
df = pd.DataFrame({
'building_name': ['Gebäude A.', 'Gebäude A.', 'B Gebäude', 'C Gebäude', 'B Gebäude', 'B Gebäude', 'D Gebäude'],
'property_scale': ['large', 'large', 'small', 'small', 'small', 'small', 'large'],
'city_code': [1, 1, 1, 2, 1, 1, 1]
})
df
building_name | property_scale | city_code |
---|---|---|
Gebäude A. | large | 1 |
Gebäude A. | large | 1 |
B Gebäude | small | 1 |
C Gebäude | small | 2 |
B Gebäude | small | 1 |
B Gebäude | small | 1 |
D Gebäude | large | 1 |
#Gruppenobjektivierung
group_info = df.groupby(['property_scale', 'city_code'])
#Werfen wir einen Blick auf den Inhalt
group_info.groups
{('large', 1): Int64Index([0, 1, 6], dtype='int64'), ('small', 1): Int64Index([2, 4, 5], dtype='int64'), ('small', 2): Int64Index([3], dtype='int64')}
#Siehe auch
group_info.get_group(('large', 1))
building_name | property_scale | city_code |
---|---|---|
Gebäude A. | large | 1 |
Gebäude A. | large | 1 |
D Gebäude | large | 1 |
# group_ID gewähren
df = pd.concat([
group_info.get_group(group_name).assign(group_id=group_id)
for group_id, group_name
in enumerate(group_info.groups.keys())])
df
building_name | property_scale | city_code | group_id |
---|---|---|---|
Gebäude A. | large | 1 | 0 |
Gebäude A. | large | 1 | 0 |
D Gebäude | large | 1 | 0 |
B Gebäude | small | 1 | 1 |
B Gebäude | small | 1 | 1 |
B Gebäude | small | 1 | 1 |
C Gebäude | small | 2 | 2 |
Ich werde es auch zu einer Funktion machen
import pandas as pd
from pandas.core.frame import DataFrame
def add_group_id(df: DataFrame, by: list) -> DataFrame:
"""Gruppieren Sie für Datensätze mit doppelten Werten_Gib einen Ausweis.
Args:
df (DataFrame):Beliebiger Datenrahmen
by (list):Spaltenname für die Gruppe
Returns:
DataFrame
"""
#Bereits Gruppe_Wenn die ID-Spalte enthalten ist, gruppieren Sie nach_ID hinzufügen
if 'group_id' in df.columns:
by += ['group_id']
group_info = df.groupby(by=by)
new_df = pd.concat([
group_info.get_group(group_name).assign(group_id=group_id)
for group_id, group_name
in enumerate(group_info.groups.keys())])
return new_df
Dank @r_beginners für das Kommentieren scheint groupby in erster Linie eine group_id-Berechnungsfunktion zu haben.
import pandas as pd
from pandas.core.frame import DataFrame
def add_group_id(df: DataFrame, by: list) -> DataFrame:
"""Gruppieren Sie für Datensätze mit doppelten Werten_Gib einen Ausweis.
Args:
df (DataFrame):Beliebiger Datenrahmen
by (list):Spaltenname für die Gruppe
Returns:
DataFrame
"""
#Bereits Gruppe_Wenn die ID-Spalte enthalten ist, gruppieren Sie nach_ID hinzufügen
if 'group_id' in df.columns:
by += ['group_id']
new_df = df.assign(group_id =df.groupby(by).ngroup())
return new_df
Wie @ nkay kommentierte, scheint pd.factorize () ebenfalls zu funktionieren.
Pandas-Methode Lassen Sie uns mehr lernen. ..
Recommended Posts