Verschieben Sie jede zweite Zeile in den Pandas-Datenrahmen


9

Ich habe einen Datenrahmen in dieser Form:

    A     B     C    D     E 
  213-1  XL   NaN    NaN    NaN
  21   22.0   12   232.0  101.32
  23-0    L   NaN    NaN    NaN
  12     23   12   232.2    NaN
  31-0   LS   NaN    NaN    NaN
  70     70   23     NaN   21.22

Ich möchte jede zweite Zeile dieses Datenrahmens in die obige Zeile verschieben, damit nur noch kombinierte Zeilen übrig sind, wie im erwarteten Ergebnis zu sehen:

     ID   Name     A     B    C     D     E
   213-1    XL    21   22.0  12  232.0  101.32
   23-0      L    12     23  12  232.2     NaN
   31-0     LS    70     70  23    NaN   21.22

Ist es möglich mit Pandas zu tun?

Antworten:


11

Ich würde verwenden concat:

new_df = pd.concat((df.iloc[::2, :2].reset_index(drop=True), 
                    df.iloc[1::2].reset_index(drop=True)),
                   axis=1)

# rename
new_df.columns = ['ID', 'Name'] + new_df.columns[2:].to_list()

Ausgabe:

      ID Name   A     B     C      D       E
0  213-1   XL  21  22.0  12.0  232.0  101.32
1   23-0    L  12    23  12.0  232.2     NaN
2   31-0   LS  70    70  23.0    NaN   21.22

6

concatam df.iloc[::2]und df.iloc[1::2]:

df1= (df.iloc[::2].dropna(axis=1).reset_index(drop=True))
df2 = (df.iloc[1::2].reset_index(drop=True))

print (pd.concat([df1,df2],ignore_index=True,axis=1))

#
       0   1   2     3     4      5       6
0  213-1  XL  21  22.0  12.0  232.0  101.32
1   23-0   L  12    23  12.0  232.2     NaN
2   31-0  LS  70    70  23.0    NaN   21.22

4
master_df = df[~df['C'].isna()].reset_index(drop=True)
master_df[['ID','Name']] = pd.DataFrame(df[df['C'].isna()][['A','B']].reset_index(drop=True), index=master_df.index)

Ausgabe

##print(master_df[['ID','Name','A', 'B', 'C', 'D', 'E']])


     ID Name   A     B     C      D       E
0  213-1   XL  21  22.0  12.0  232.0  101.32
1   23-0    L  12    23  12.0  232.2     NaN
2   31-0   LS  70    70  23.0    NaN   21.22
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.