Hier einige Beispieldaten spielen:
In [1]:
df = pd.DataFrame(np.transpose([np.random.choice(['ebt','other'], (10)),
np.random.rand(10)]), columns=['paymenttypeid','other'])
df
Out[1]:
paymenttypeid other
0 other 0.3130770966143612
1 other 0.5167434068096931
2 ebt 0.7606898392115471
3 ebt 0.9424572692382547
4 ebt 0.624282017575857
5 ebt 0.8584841824784487
6 other 0.5017083765654611
7 other 0.025994123211164233
8 ebt 0.07045354449612984
9 ebt 0.11976351556850084
Lassen Sie uns dies
In [2]: data = dd.from_pandas(df, npartitions=2)
zu einem Datenrahmen konvertieren und apply
verwenden (auf einer Serie) zuzuordnen:
In [3]:
data['ebt_dummy'] = data.paymenttypeid.apply(lambda x: 1 if x =='ebt' else 0, meta=('paymenttypeid', 'str'))
data.compute()
Out [3]:
paymenttypeid other ebt_dummy
0 other 0.3130770966143612 0
1 other 0.5167434068096931 0
2 ebt 0.7606898392115471 1
3 ebt 0.9424572692382547 1
4 ebt 0.624282017575857 1
5 ebt 0.8584841824784487 1
6 other 0.5017083765654611 0
7 other 0.025994123211164233 0
8 ebt 0.07045354449612984 1
9 ebt 0.11976351556850084 1
Update:
Es scheint, dass die meta
Sie passieren das Problem ist, da dies funktioniert:
data = data.map_partitions(lambda df: df.assign(
ebt_dummy = np.where((df["paymenttypeid"]=='ebt'), 1, 0)))
data.compute()
In meinem Beispiel, wenn ich die meta
, angeben wollte würde ich die dtypes von passieren müssen die aktuelle data
, nicht die, die ich einmal erwarte ich zuweisen:
data.map_partitions(lambda df: df.assign(
ebt_dummy = np.where((df["paymenttypeid"]=='ebt'), 1, 0)),
meta={'paymenttypeid': 'str', 'other': 'float64'})
Danke für die Antwort! Gibt es einen vektorisierten Weg, dies zu tun? Ich hatte darüber nachgedacht, aber eine Zeile für Zeile auf etwas anderes als einen kleinen Datensatz anwenden ist ziemlich prohibitiv. – sfortney
Ich aktualisierte meine Antwort, um es mit 'map_partitions' zu tun (nie verwendet Dask bis jetzt ...). Ich schlage vor, Sie überarbeiten Ihr Meta-Keyword. Das obige funktioniert gut. –
Ja, was es war. Ich habe das Meta falsch verstanden. Danke für die Hilfe! – sfortney