2017-10-15 4 views
3

Il sera plus facile d'expliquer à partir d'un échantillon de la trame de données:Pandas dataframe moyenne conditionnelle basée sur les noms de colonnes

TimeStamp 382.098  382.461  383.185  383.548 
    10:28:00 0.012448 0..0124485 0.
    10:30:00 0.0124135 0..0124135 0.012431 
    10:32:00 0.0551035 0.0551725 0.055931 0.0563105 
    10:34:00 0.055586 0.0557245 0.056655 0.0569485 
    10:36:00 0.055586 0.055776 0.0568105 0.057362 

Je veux que ma sortie soit:

TimeStamp 382   383 
    10:28:00 0.012405 0.01240525 
    10:30:00 0.012405 0.01242225 
    10:32:00 0.05513  0.05612075 
    10:34:00 0.05565525 0.05680175 
    10:36:00 0.055681 0.05708625 

Alors, je Je veux regarder les valeurs de nom de colonne et si elles sont identiques aux nombres entiers, je veux que la sortie col ait la moyenne des valeurs pour chaque valeur d'index de temps. Mon idée était d'utiliser df.round pour arrondir les en-têtes de colonnes au nombre entier le plus proche, puis d'utiliser .mean() pour appliquer la moyenne sur l'axe = 0 pour les mêmes en-têtes de colonnes. Mais, j'obtiens une erreur en utilisant la fonction round sur le type d'index de dataframe.

+0

Oui? Si vous avez besoin d'une réponse, veuillez la demander. Merci. –

Répondre

2
df.rename(columns=dict(zip(df.columns[1:], df.columns[1:]\ 
     .values.astype(float).round().astype(str))),inplace=True) 

df.set_index('TimeStamp').groupby(df.columns[1:], 
          axis=1).mean().reset_index() 
+0

Soupir, c'est la même chose avec cet utilisateur. Accepte d'abord ma réponse, puis je n'accepte pas. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ que se passe-t-il? ...... got it ... – Wen

+0

Rien, c'est bon. –

1

Renommer des colonnes avec conversion de type, déplacez TimeStamp à l'index, puis utilisez groupby pour obtenir la colonne signifie:

df.rename(columns=lambda x: int(float(x)) if x!="TimeStamp" else x, inplace=True) 
df.set_index("TimeStamp", inplace=True) 

df 
       382  382  383  383 
TimeStamp           
10:28:00 0.012448 0..012448 0.
10:30:00 0.012414 0..012414 0.012431 
10:32:00 0.055103 0.055172 0.055931 0.056310 
10:34:00 0.055586 0.055725 0.056655 0.056948 
10:36:00 0.055586 0.055776 0.056810 0.057362 


df.groupby(df.columns, axis=1).mean() 

       382  383 
TimeStamp      
10:28:00 0.012405 0.012405 
10:30:00 0.012405 0.012422 
10:32:00 0.055138 0.056121 
10:34:00 0.055655 0.056802 
10:36:00 0.055681 0.057086 
3

Utilisez groupby le long du 1er axe avec un lambda.

df.set_index('TimeStamp', inplace=True) 
df.groupby(by=lambda x: int(x.split('.')[0]), axis=1).mean() 

       382  383 
TimeStamp 
10:28:00 0.012405 0.012405 
10:30:00 0.012405 0.012422 
10:32:00 0.055138 0.056121 
10:34:00 0.055655 0.056802 
10:36:00 0.055681 0.057086 
+0

Vous manquez tellement ~ :-) – Wen

+0

@Wen Vous avez manqué aussi, mon pote. –