[PYTHON] [Pandas] Doppelte Löschung bei gleichzeitiger Ergänzung von Fehlern
Einführung
Wenn Sie Duplikate eines Pandas-Datenrahmens mit einem bestimmten Schlüssel löschen, möchten Sie möglicherweise Duplikate löschen, nachdem fehlende Datensätze zwischen Datensätzen ausgefüllt wurden, bei denen festgestellt wurde, dass sie derselbe Datensatz sind.
import pandas as pd
df = pd.DataFrame({
'building_name': ['Gebäude A.', 'Eine Rechnung', None, 'C Gebäude', 'B Gebäude', None, 'D Rechnung'],
'property_scale': ['large', 'large', , '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 |
None |
small |
1 |
C Gebäude |
small |
2 |
B Gebäude |
small |
1 |
None |
small |
1 |
D Gebäude |
large |
1 |
Abschluss + doppelte Entfernungsfunktion
from pandas.core.frame import DataFrame
def drop_duplicates(df: DataFrame, subset: list, fillna: bool = False) -> DataFrame:
"""Doppelte Löschung nach Ergänzung einer Teilmenge zu einem Schlüssel.
Args:
df (DataFrame):Beliebiger Datenrahmen
subset (list):Schlüssel zum Löschen von Duplikaten
fillna (bool):Gibt an, ob das Fehlen zwischen doppelten Datensätzen abgeschlossen werden soll. default False.
Returns:
DataFrame
"""
group_info = df.groupby(by=subset)
new_df = pd.concat([
group_info.get_group(group_name).fillna(method='bfill').fillna(method='ffill')
for group_name
in group_info.groups.keys()])
new_df = new_df.drop_duplicates(subset=subset)
return new_df
Lauf
drop_duplicates(df, ['property_scale', 'city_code'], True)
building_name |
property_scale |
city_code |
Gebäude A. |
large |
1 |
B Gebäude |
small |
1 |
C Gebäude |
small |
2 |