was ich in einem Datenrahmen haben:Fill Werte FEHLT nur in einem Datenrahmen (Pandas)
email user_name sessions ymo
[email protected] JD 1 2015-03-01
[email protected] JD 2 2015-05-01
Was ich brauche:
email user_name sessions ymo
[email protected] JD 0 2015-01-01
[email protected] JD 0 2015-02-01
[email protected] JD 1 2015-03-01
[email protected] JD 0 2015-04-01
[email protected] JD 2 2015-05-01
[email protected] JD 0 2015-06-01
[email protected] JD 0 2015-07-01
[email protected] JD 0 2015-08-01
[email protected] JD 0 2015-09-01
[email protected] JD 0 2015-10-01
[email protected] JD 0 2015-11-01
[email protected] JD 0 2015-12-01
ymo
Spalte sind pd.Timestamp
s:
all_ymo
[Timestamp('2015-01-01 00:00:00'),
Timestamp('2015-02-01 00:00:00'),
Timestamp('2015-03-01 00:00:00'),
Timestamp('2015-04-01 00:00:00'),
Timestamp('2015-05-01 00:00:00'),
Timestamp('2015-06-01 00:00:00'),
Timestamp('2015-07-01 00:00:00'),
Timestamp('2015-08-01 00:00:00'),
Timestamp('2015-09-01 00:00:00'),
Timestamp('2015-10-01 00:00:00'),
Timestamp('2015-11-01 00:00:00'),
Timestamp('2015-12-01 00:00:00')]
Leider ist diese Antwort: Adding values for missing data combinations in Pandas nicht gut, da es Duplikate für vorhandene erstellt ymo
Werte.
Ich habe versucht, so etwas wie dieses, aber es ist extrem langsam:
for em in all_emails:
existent_ymo = fill_ymo[fill_ymo['email'] == em]['ymo']
existent_ymo = set([pd.Timestamp(datetime.date(t.year, t.month, t.day)) for t in existent_ymo])
missing_ymo = list(existent_ymo - all_ymo)
multi_ind = pd.MultiIndex.from_product([[em], missing_ymo], names=col_names)
fill_ymo = sessions.set_index(col_names).reindex(multi_ind, fill_value=0).reset_index()
Wenn die fehlenden Einträge des gefüllten Überzahl, füllen Sie dann einen neuen Datenrahmen mit einem pd.data_range beginnen. Fügen Sie dann Sitzungswerte hinzu, bei denen die Daten übereinstimmen. Wenn E-Mail-Adresse und Benutzername 1-für-1 sind, dann sollten Sie nur einen von ihnen im Datenrahmen haben, um Speicher zu sparen (wenn Größe ein Problem ist) – dodell