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!

  • Wie finde ich das nächste Spiel auf der Grundlage von 2 Schlüsseln von einem Dataframe zum anderen?
  • Wie man den Index in einem Pandas-Datenrahmen zurücksetzt?
  • Bedingte Auswahl von Daten in einem Pandas DataFrame
  • Pandas: Halten nur erste Zeile von Daten in jedem 60 Sekunden bin
  • Pyspark Spark DataFrame - Aggregat und Filter Spalten in Kartentyp Spalte
  • Konstruiere pandas DataFrame aus Werten in Variablen
  • 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.