Ich habe einen Pandas-Datenrahmen wie folgt:
Column1 Column2 Column3 Column4 Column5
0 a 1 2 3 4
1 a 3 4 5
2 b 6 7 8
3 c 7 7
Was ich jetzt tun möchte, ist ein neues Datenframe mit Spalte1 und eine neue SpalteA zu erhalten. Diese Spalte A sollte alle Werte aus den Spalten 2 - (bis) n (wobei n die Anzahl der Spalten von Spalte 2 bis zum Ende der Zeile ist) wie folgt enthalten:
Column1 ColumnA
0 a 1,2,3,4
1 a 3,4,5
2 b 6,7,8
3 c 7,7
Wie kann ich dieses Problem am besten angehen? Jeder Rat wäre hilfreich. Danke im Voraus!
Sie können apply
übergeben, axis=1
zu apply
zeilenweise übergeben und dann den dtype in str
und join
konvertieren:
In [153]:
df['ColumnA'] = df[df.columns[1:]].apply(
lambda x: ','.join(x.dropna().astype(int).astype(str)),
axis=1
)
df
Out[153]:
Column1 Column2 Column3 Column4 Column5 ColumnA
0 a 1 2 3 4 1,2,3,4
1 a 3 4 5 NaN 3,4,5
2 b 6 7 8 NaN 6,7,8
3 c 7 7 NaN NaN 7,7
Hier rufe ich dropna
auf, um die NaN
loszuwerden. Wir müssen jedoch erneut in int
umwandeln, damit wir nicht mit floats als str.
Ich schlage vor, .assign
df2 = df.assign(ColumnA = df.Column2.astype(str) + ', ' + \
df.Column3.astype(str) + ', ' df.Column4.astype(str) + ', ' \
df.Column4.astype(str) + ', ' df.Column5.astype(str))
es ist einfach, vielleicht lang, aber es hat bei mir funktioniert
Wenn Sie viele Spalten haben, sagen Sie - 1000 Spalten in Dataframe und Sie möchten einige Spalten basierend auf particular column name
zusammenführen, z. -Column2
in Frage und willkürliche Nr. von Spalten nach dieser Spalte (z. B. hier 3 Spalten nach 'Column2
einschließlich Column2
als OP-Abfrage).
Wir können die Position der Spalte mit .get_loc()
- als Antwort hier erhalten.
source_col_loc = df.columns.get_loc('Column2') # column position starts from 0
df['ColumnA'] = df.iloc[:,source_col_loc+1:source_col_loc+4].apply(
lambda x: ",".join(x.astype(str)), axis=1)
df
Column1 Column2 Column3 Column4 Column5 ColumnA
0 a 1 2 3 4 1,2,3,4
1 a 3 4 5 NaN 3,4,5
2 b 6 7 8 NaN 6,7,8
3 c 7 7 NaN NaN 7,7
Um NaN
zu entfernen, verwenden Sie .dropna()
oder .fillna()
Ich hoffe es hilft!