Ich habe eine CSV-Datei, die etwa wie folgt aussieht:Merging eine unbestimmte Anzahl von Zeilen in einem Datenrahmen
tid || instr_count || fnname
=============================
22 || 892806 || main
22 || 18 || randlc
22 || 120 || makea
Ich mag die Werte von instr_count
zusammen basierend fusionieren, ob oder nicht fnname
in a erscheint gegebene Liste. Wenn zum Beispiel meine Liste ['main', 'makea']
ist, sollte die endgültige Tabelle wie folgt aussehen:
tid || instr_count || fnname
=============================
22 || 892806 || main
22 || 138 || makea
Ich weiß nicht, vor der Zeit, wie viele Einträge zwischen zwei Werten in der angegebenen Liste sein wird - so kann es sein, ähnlich dieser:
tid || instr_count || fnname
=============================
22 || 892806 || main
22 || 18 || randlc
22 || 7 || randlc
22 || 35 || randlc
22 || 20 || randlc
22 || 120 || makea
, die an zusammengepresst werden sollten:
tid || instr_count || fnname
=============================
22 || 892806 || main
22 || 200 || makea
habe ich diese Werte in einem Dataframe
mit Pandas 0.17.1 und python 2.7.6 geladen. Hier ist, was ich bisher:
def compressDataframes(df):
new_df = pd.DataFrame(columns=df.columns)
instr_count = 0
i = 0
for row in df.itertuples():
instr_count += row[2]
if any(f in row[3] for f in FUNCS): #FUNCS is my "given list"
new_df.loc[i] = [row[1], instr_count, row[3]]
i += 1
instr_count = 0
return new_df
Dies funktioniert, aber ich vermute, dass es einen Weg geben muss, es zu tun schneller (ich mit einigen sehr großen (> 10 GB) Datensätze gerade arbeite). Hat jemand irgendwelche Vorschläge?
realisiert Just - ich glaube nicht, das richtig funktioniert, wenn ich habe so etwas wie 'main, randlc, randlc, makea, makea'. Der erste 'makea' wird in den zweiten gruppiert, oder? – tonysdg
Ja, Sie haben Recht. – jezrael
Wäre es möglich, die Zeilennummer in die gruppierte Spalte zu kopieren? Das würde eine eindeutige Kennung ergeben, die dann wieder gefüllt werden könnte. – tonysdg