2017-10-15 3 views
3

Es wird die am einfachsten zu erklären, mit einer Probe des Datenrahmen beginnen:Pandas Datenrahmen bedingte Mittelwert basierend auf Spaltennamen

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 

Ich mag ausgegeben werden:

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 

Also, ich Ich möchte die Namen der Spaltennamen sehen und wenn sie bis auf ganze Zahlen gleich sind, möchte ich, dass der Ausgabe-Col den Mittelwert der Werte für jeden Zeitindexwert hat.

Meine Idee war es, mit df.round die Spaltenköpfe auf die nächste ganze Zahl zu runden und dann .mean() zu verwenden, um den Mittelwert auf Achse = 0 für gleiche Spaltenköpfe anzuwenden. Aber ich bekomme einen Fehler mit der Rundungsfunktion für den Dataframe-Indextyp.

+0

Ja? Wenn Sie eine Antwort benötigen, fragen Sie danach. Vielen Dank. –

Antwort

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

Seufz, es ist dasselbe mit diesem Benutzer. Akzeptiert meine Antwort zuerst und akzeptiert dann nicht. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ was passiert gerade? ...... habe es ... – Wen

+0

Nichts, es ist in Ordnung. –

1

mit Typ-Konvertierung umbenennen Spalten, TimeStamp zum Index bewegen, und dann groupby verwenden Spalt zu erhalten bedeutet:

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

Verwenden groupby entlang der ersten Achse mit einem 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

vermisse dich so sehr ~ :-) – Wen

+0

@Wen verpasste dich auch, Ol Kumpel. –

Verwandte Themen