Wie man DataFrame Spalte in Schlüsselwertpaare als Zeile in Python sammelt

Ich versuche, eine Pandas DataFrame Spalte in einen Schlüssel Wert paaren eine Liste es als Zeile in Python zu sammeln. Wenn wir diese DataFrame als Beispiel nehmen, möchte ich von hier aus gehen:

import pandas as pd from collections import OrderedDict df = pd.DataFrame({'value_2016': [200], 'value_2017': [300], 'value_2018': [float('NaN')]}) print(df) value_2016 value_2017 value_2018 0 200 300 NaN 

nach:

 df_result = pd.DataFrame(OrderedDict({'year': [2016, 2017], 'value': [200, 300]})) print(df_result) year value 0 2016 200 1 2017 300 

Wenn Sie in R vertraut sind, wäre das gleich etwas so:

 require("plyr"); require("dplyr"); require(tidyr) df <- data.frame(value_2016 = 200, value_2017 = 300, value_2018 = NA) df %>% gather(year, value, value_2016:value_2018) %>% mutate(year = gsub(x = .$year, replacement = "", "value_")) %>% na.exclude year value 1 2016 200 2 2017 300 

Jede Hilfe wäre sehr cool!

  • Konvertiere R Matrix zu Pandas Dataframe
  • RStudio lädt nicht alle Python-Module über rPython-Aufruf
  • Ausführen eines R-Skripts aus Python
  • Sweave für Python
  • Rpy2: Überprüfen Sie, ob das Paket installiert ist
  • Warum sind Pandas in Python schneller als data.table verschmilzt in R?
  • Nummern vor einem Ereignis generieren
  • Knitr - Fehler beim Import von Python - Modul
  • One Solution collect form web for “Wie man DataFrame Spalte in Schlüsselwertpaare als Zeile in Python sammelt”

    Sie können MultiIndex durch split erstellen und dann nach stack umformen:

     df.columns = df.columns.str.split('_', expand=True) df = df.stack().reset_index(level=0, drop=True).rename_axis('year').reset_index() #if necessary convert float to int df.value = df.value.astype(int) print (df) year value 0 2016 200 1 2017 300 

    Wenn gewünscht, verwenden Sie DataFrame Konstruktor verwenden get_level_values :

     df.columns = df.columns.str.split('_', expand=True) df = df.stack() df_result = pd.DataFrame(OrderedDict({'year': df.index.get_level_values(1), 'value': df['value'].astype(int).values})) print(df_result) year value 0 2016 200 1 2017 300 
    Python ist die beste Programmiersprache der Welt.