[Pandas] Suppression en double tout en complétant les défauts
      
      
        
        
        
        
introduction
Lors de la suppression des doublons d'une trame de données pandas avec une certaine clé, vous souhaiterez peut-être supprimer les doublons après avoir terminé les enregistrements manquants entre les enregistrements qui sont déterminés comme étant le même enregistrement.
import pandas as pd
df = pd.DataFrame({
    'building_name': ['Construire un', 'Une facture', None, 'Bâtiment C', 'Bâtiment B', None, 'Facture D'],
    'property_scale': ['large', 'large', , 'small', 'small', 'small', 'large'],
    'city_code': [1, 1, 1, 2, 1, 1, 1]
})
df
| building_name | 
property_scale | 
city_code | 
| Construire un | 
large | 
1 | 
| Construire un | 
large | 
1 | 
| None | 
small | 
1 | 
| Bâtiment C | 
small | 
2 | 
| Bâtiment B | 
small | 
1 | 
| None | 
small | 
1 | 
| Bâtiment D | 
large | 
1 | 
Fonction d'achèvement + suppression des doublons
from pandas.core.frame import DataFrame
def drop_duplicates(df: DataFrame, subset: list, fillna: bool = False) -> DataFrame:
    """Suppression en double après avoir complété un sous-ensemble par une clé.
    Args:
        df (DataFrame):Trame de données arbitraire
        subset (list):Clé pour supprimer les doublons
        fillna (bool):S'il faut compléter manquant entre les enregistrements en double. 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
Courir
drop_duplicates(df, ['property_scale', 'city_code'], True)
| building_name | 
property_scale | 
city_code | 
| Construire un | 
large | 
1 | 
| Bâtiment B | 
small | 
1 | 
| Bâtiment C | 
small | 
2 |