Ich habe bereits eine Frage gestellt, aber ich habe sie schlecht dargestellt. Hier mein Problem:
Ich habe so einen Datenrahmen:
Spalte1 | Spalte2 | Spalte3 | Spalte4 | GEWÜNSCHTE SPALTE |
---|---|---|---|---|
SF | 123 | 01/02 | HOCH | UP, WA |
BF | 543 | 30/12 | TUN | STERBEN AN |
QW | 241 | 30/12 | VON | STERBEN AN |
SF | 123 | 01/02 | WA | UP, WA |
QW | 789 | 20/11 | D | D |
SF | 678 | 31.12. | OT | OT |
Ich möchte die GEWÜNSCHTE SPALTE erhalten . Die Logik ist folgende:
Wo ist mein Problem? Ich weiß nicht, ob ich überlegt habe, aber die Verwendung von groupby pandas reduziert die Zeilen des Datenrahmens. Mein Ziel ist es einfach, eine Spalte hinzuzufügen, wie ich oben gezeigt habe.
Vielen Dank im Voraus!!!
Verwendung GroupBy.transform
mit numpy.where
:
m = df.Col1.eq('SF')
s1 = df.groupby(['Col2','Col3'])['Col4'].transform(', '.join)
s2 = df.groupby(['Col3'])['Col4'].transform(', '.join)
df['DESIRED COLUMN'] = np.where(m, s1, s2)
print (df)
Col1 Col2 Col3 Col4 DESIRED COLUMN
0 SF 123 01/02 UP UP, WA
1 BF 543 30/12 DO DO, AF
2 QW 241 30/12 AF DO, AF
3 SF 123 01/02 WA UP, WA
4 QW 789 20/11 D D
5 SF 678 31/12 OT OT
Mögliche Lösung, wenn NaN
s in Col2, Col3
:
m = df.Col1.eq('SF')
df1 = df.fillna({'Col2':'nan', 'Col3':'nan'})
s1 = df1.groupby(['Col2','Col3'])['Col4'].transform(', '.join)
s2 = df1.groupby(['Col3'])['Col4'].transform(', '.join)
df['DESIRED COLUMN'] = np.where(m, s1, s2)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen