Kombinieren Sie Aufeinanderfolgende Zeilen mit Gleichen Spaltenwerten
Habe ich etwas, das so aussieht.
Wie komme ich von dieser:
0 d
0 The DT
1 Skoll ORGANIZATION
2 Foundation ORGANIZATION
3 , ,
4 based VBN
5 in IN
6 Silicon LOCATION
7 Valley LOCATION
zu diesem:
0 d
0 The DT
1 Skoll Foundation ORGANIZATION
3 , ,
4 based VBN
5 in IN
6 Silicon Valley LOCATION
Du musst angemeldet sein, um einen Kommentar abzugeben.
@rfan Antwort funktioniert natürlich, als alternative, hier ist ein Ansatz mit pandas groupby.
Den
.groupby()
Gruppen der Daten, die durch die 'b' - Spalte - diesort=False
ist notwendig, um die Ordnung intakt. Die.apply()
gilt eine Funktion, die für jede Gruppe von b-Daten, in diesem Fall den Beitritt der string zusammen, getrennt durch Leerzeichen.EDIT:
Griff der mehr Allgemeine Fall (wiederholte nicht-aufeinander folgende Werte) - ein Ansatz wäre zunächst hinzufügen eines sentinel-Spalte, die tracks, die Gruppe von aufeinander folgenden Daten jeder Zeile gilt, wie diese:
Dann fügen Sie die-Taste, um die groupby-und sollte es auch bei wiederholten Werten. Zum Beispiel mit diesem dummy-Daten mit Wiederholungen:
Anwendung der groupby:
df['helper'] = (np.where(df.d=='DT',df.index,np.nan))
df.helper.fillna(method='ffill')
Eigentlich denke ich, die groupby-Lösung von @chrisb ist besser, aber würden Sie brauchen, um einen anderen zu erstellen groupby-key variable zu verfolgen, die nicht aufeinander Folgen wiederholt Werte, wenn diejenigen, die möglicherweise vorhanden sind. Dies funktioniert so, dass ein quick-and-dirty " für kleinere Probleme obwohl.
Ich denke, das ist eine situation, wo es einfacher ist, um die Arbeit mit basic mit Iteratoren, anstatt zu versuchen zu verwenden pandas Funktionen. Ich kann mir vorstellen, eine situation mittels groupby, aber es scheint schwer zu pflegen sind die aufeinanderfolgenden Zustand, wenn die zweite variable wiederholt.
Dies kann vermutlich gereinigt werden, aber ein Beispiel:
df[df.d.isin((df.d.value_counts() > 1).index[df.d.value_counts() > 1])]
dieser liefert ein dataframe mit nur die doppelten Zeilen