ich einen Beispieldatensatz habe:Gruppe und Ausgabe auf Teilspaltenwert Pandas Python
import pandas as pd
import re
df = {'READID': [1,2,3 ,4,5 ,6,7 ,8,9],
'VG': ['LV5-F*01','LV5-F*01' ,'LV5-A*02','LV5-D*01','LV5-E*01','LV5-C*01','LV5-D*01','LV5-E*01','LV5-F*01'],
'Pro': [1,1,1,0.33,0.59,1,0.96,1,1]}
df = pd.DataFrame(df)
es wie folgt aussieht:
df
Out[12]:
Pro READID VG
0 1.00 1 LV5-F*01
1 1.00 2 LV5-F*01
2 1.00 3 LV5-A*02
3 0.33 4 LV5-D*01
4 0.59 5 LV5-E*01
5 1.00 6 LV5-C*01
6 0.96 7 LV5-D*01
7 1.00 8 LV5-E*01
8 1.00 9 LV5-F*01
ich will Spalte ‚VG‘ GROUPBY aber nur den Teil vor '*' für jede Zeile, und gruppieren Sie dann um die gleichen Werte und geben Sie sie in separaten Dateien aus.
mein Konzept ist:
- Gruppe der Datensatz ‚df‘ durch Spalte
- ‚VG‘ für jede Zeile der Spalte ‚VG‘ Blick auf nur den Teil vor dem ‚*‘, z.B. "LV5-F", "LV5-A", "LV5-D" usw.
- gruppieren Sie das Dataset noch einmal, aber dieses Mal für die gleichen Werte aus Schritt 2
- geben Sie jedes unterschiedliche gruppierte Set in eine separate Datei aus .
Wunsch Ausgabe, einzelne separate Dateien:
'LV5-F.txt':
Pro READID VG
0 1.00 1 LV5-F*01
1 1.00 2 LV5-F*01
8 1.00 9 LV5-F*01
'LV5-A.txt':
Pro READID VG
2 1.00 3 LV5-A*02
'LV5-D.txt':
Pro READID VG
3 0.33 4 LV5-D*01
6 0.96 7 LV5-D*01
'LV5-E.txt':
Pro READID VG
4 0.59 5 LV5-E*01
7 1.00 8 LV5-E*01
'LV5-C.txt':
Pro READID VG
5 1.00 6 LV5-C*01
mein Versuch:
(df.groupby('VG')
.apply(lambda x: re.findall('([0-9A-Z-]+)\*',x))
.groupby('VG')
.apply(lambda gp: gp.to_csv('{}.txt'.format(gp.name), sep='\t', index=False))
)
aber am failed '.apply (lambda x: re.findall (' ([0 -9A-Z -] +) * ', x)' Schritt und ich bin mir nicht sicher, warum es nicht funktioniert, denn wenn ich diesen Code von selbst ohne im Zusammenhang mit einer Lambda-Funktion lief, hat es funktioniert.
Ich habe einen Fehler: ‚Typeerror: extract() hat ein unerwartetes Schlüsselwort-Argument 'expand' erhalten, auch warum enthält die von Ihnen angezeigte Ausgabe Kommas? Gibt es eine Möglichkeit, die gewünschte Ausgabe zu erzeugen? – Jessica
@Jessica dieses Argument fallen lassen. Es wird sich beschweren, wenn Sie es nicht in Pandas Version 0.18.1 haben. Zuvor beschwert es sich, dass Sie es überhaupt haben. – piRSquared
können Sie mir den Regex-Teil erklären? r '^ ([^ \ *] +) Danke – Jessica