Ich habe ein paar Wochen daran gearbeitet, Folgendes aufzubauen:

Mein Datenrahmen ist der folgende:

enter image description here

Und ich möchte folgendes bauen:

enter image description here

Ich habe Folgendes versucht, aber das funktioniert nicht:

formatted_df = pd.melt(dfNull,
                   ["registro"],
                   var_name="Atributo",
                   value_name="Valor")
-1
Oscar Salas 24 Feb. 2020 im 02:31

3 Antworten

Ich denke, Ihr Problem war, dass "Registro" in Ihrem DataFrame groß geschrieben wurde, aber nicht in Ihrem Schmelzbefehl.

Das scheint zu funktionieren:

df = pd.DataFrame({'Registro': [1, 2, 3], 
                   '100 mucho actividad': [None, None, 1],
                   '120 mil conformar': [1, 1, None],
                   '190 solo recibir': [1, 1, 1]})

Dies erzeugt den folgenden DataFrame:

            Registro    100 mucho actividad 120 mil conformar    190 solo recibir
0                  1                    NaN               1.0                   1
1                  2                    NaN               1.0                   1
2                  3                    1.0               NaN                   1

Und jetzt können wir schmelzen (ich verwende "Registro" als Index des neuen DataFrame). Beachten Sie auch, dass ich die resultierenden NaN-Spalten lösche und den Index so sortiere, dass er in der erwarteten Reihenfolge ist.

formatted_df = pd.melt(df,
                       ["Registro"],
                       var_name="Atributo",
                       value_name="Valor").dropna().set_index('Registro')

formatted_df.sort_index(inplace=True)

formatted_df

Ergebnisse:

                       Atributo     Valor
Registro        
       1      120 mil conformar     1.0
       1       190 solo recibir     1.0
       2      120 mil conformar     1.0
       2       190 solo recibir     1.0
       3    100 mucho actividad     1.0
       3       190 solo recibir     1.0
1
eraoul 23 Feb. 2020 im 23:57

Versuchen Sie, id_vars und value_vars anzugeben.

>>> df = pd.DataFrame({'ID':range(5),'A':range(0,5),'B':['Z','Y','X','W','V']})
>>> df
   ID  A  B
0   0  0  Z
1   1  1  Y
2   2  2  X
3   3  3  W
4   4  4  V
>>> df.melt(id_vars=['ID'], value_vars=['A','B'], var_name='var_name', value_name='val_name')
   ID var_name val_name
0   0        A     0
1   1        A     1
2   2        A     2
3   3        A     3
4   4        A     4
5   0        B     Z
6   1        B     Y
7   2        B     X
8   3        B     W
9   4        B     V
0
MichaelD 23 Feb. 2020 im 23:49

Durchsucht die pandas.melt Pandas.melt Link und fand die Option dfNull nicht Ich habe einen ähnlichen Code gefunden:

formatted_df = pd.melt(df,["religion"],var_name="income",value_name="freq")
formatted_df = formatted_df.sort_values(by=["religion"])
formatted_df.head(10)

Basierend auf diesem Link pandas.melt-Beispielfall

Versuchen Sie, Ihren Code auf diese Weise zu formatieren, um festzustellen, ob der Wechsel von "dfNull" zu "df" funktioniert

formatted_df = pd.melt(df,
               ["registro"],
               var_name="Atributo",
               value_name="Valor")
-1
Siwoku Adeola 24 Feb. 2020 im 00:00