0
votes

DataFrame Rechercher et supprimer des valeurs non modifiées Plusieurs champs

Je suis Struggeing avec un processus de massage de données. Je pense à une meilleure façon de trouver et de supprimer des entrées sans changement dans Dataframe.

J'ai des données de niveau de signal provenant d'un périphérique mobile p> xxx pré>

si fondamentalement et certaines données associées + horodatage p>

ce que je dois faire est de filtrer les données de manière suivante: p>

  • Si le niveau de signal ne change pas pour les N-Échantillons du passé (par exemple, N = 3 échantillons) li>
  • Si d'autres valeurs ne changent pas aussi bien li>
  • filtrer les données. LI> ul>

    donc à la fin, je voudrais avoir un maximum de N-mêmes échantillons dans la ligne. strong> p>

    Résultats attendus avec fenêtre N = 3 P >

    RadioSmall = RadioMeasAll.loc[:,['measLatitude','measLongitude','measCellId','measNetTypeDetail','measOperatorCode','measCid','measLac','measSignalLevel','cellArfcn']].copy()
    
    def f(x):
        y = x[~np.isnan(x)]
        if len(np.unique(y)) > 1:
            return 1
        else:
            return 0
    
    a = RadioSmall.rolling(window=3, min_periods=1).apply(f,raw=True)
    a['sum']=a.sum(axis=1)
    b = pd.DataFrame(index=a.index)
    b['filtering'] = a['sum']
    df_filtered =  b.query('filtering>0')
    
    RadioMeasAll.join(df_filtered)
    


2 commentaires

Jetez un coup d'œil à Comment faire de bons exemples de pandas reproductibles - Veuillez poster un sous-ensemble de vos données réelles, pas des captures d'écran des données, Nous pouvons donc reproduire votre problème.


Merci @ W-M pour pointer cela. J'ai édité mon post


3 Réponses :


0
votes

Je crois que je comprends votre objectif maintenant. xxx

a est une matrice contenant des indices de lignes consécutives contenant des valeurs de colonnes égales par rapport à la ligne suivante (elle ommites la première occurrence ).

Nous devrions maintenant le diviser en sous-ensembles d'indices consécutifs (idée de cette réponse ) xxx

duplicate_groups contient maintenant des tableaux d'indices consécutifs. Vous pouvez maintenant filtrer pour des doublons consectiques plus longtemps que n, disons n = 5 . xxx

Essayez de l'exécuter sur vos données et de voir s'il résout votre problème.


5 commentaires

Je comprends que les colonnes sont un éventail de colonnes à vérifier. Mais qu'est-ce que ID_? J'ai édité mon message avec mon code d'échantillon et mon ensemble reproductible


Désolé, ID _ était censé être A


Après avoir exécuté les deux premières lignes, qu'est-ce que a contient?


un retour vide [] colonnes = ["MASLATICITUDE '," MASLONGITUDE "," MASENELLID "," MASENETTYPETEL AIL "," MASELAC ",' MeasSlac", " ',' cavef cn '] df.reeset_index (goutte = false) a = df.index [(df [colonnes] == df [colonnes] .Shift ()). Tout (Axis = 1)]


Est-ce que l'une de ces colonnes en float est-elle? Changez votre variable COLONMES SELO ILLE A SEULEMENT UNE MASIGNALLEVEL et voir puis, puis ajoutez plus de colonnes et vérifiez laquelle l'on fait pour être vide.



0
votes

J'utiliserais un partage de données temporaire de la même index que l'original pour calculer les groupes de valeurs consécutifs, leur taille et le rang d'une rangée dans son groupe.

alors je ne garderais que dans le Dataframe original les rangées ayant un rang sous la fenêtre: xxx

il donne comme prévu: xxx

Remarque: Si dans le Dataframe original le Date Time était l'index au lieu d'être une colonne, la définition des doublons changerait à: xxx


0 commentaires

1
votes
import numpy as np

cols_to_compare = df.columns.drop(['measDate'])  # Columns where the values will be compared
window_size = 3

has_change = df[cols_to_compare].diff().any(axis=1)
df = df[has_change.rolling(window_size).apply(np.any, raw=True).fillna(1, downcast="bool")]

0 commentaires