2024-09-27 23:26:28 发布
网友
在Pandas中,如果我想创建一列条件伪对象(如果变量等于字符串,则为1,否则为0),则Pandas中的goto为:
data["ebt_dummy"] = np.where((data["paymenttypeid"]=='ebt'), 1, 0)
在dask数据帧中天真地尝试此操作会引发错误。按照map_分区文档中的说明操作也会引发错误:
做这件事的好方法,或者说最卑鄙的方式是什么?在
这对我也很有用:
data['ebt_dummy'] = dd.from_array(np.where((df["paymenttypeid"]=='ebt'), 1, 0))
以下是一些示例数据:
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
让我们把它转换成一个数据帧
并使用apply(在序列上)来分配:
apply
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
更新:
您传递的meta似乎是问题所在,因为这是有效的:
meta
data = data.map_partitions(lambda df: df.assign( ebt_dummy = np.where((df["paymenttypeid"]=='ebt'), 1, 0))) data.compute()
在我的示例中,如果我想指定meta,那么我必须传递当前data的数据类型,而不是我分配后预期的类型:
data
data.map_partitions(lambda df: df.assign( ebt_dummy = np.where((df["paymenttypeid"]=='ebt'), 1, 0)), meta={'paymenttypeid': 'str', 'other': 'float64'})
这对我也很有用:
以下是一些示例数据:
让我们把它转换成一个数据帧
^{pr2}$并使用
apply
(在序列上)来分配:更新:
您传递的
meta
似乎是问题所在,因为这是有效的:在我的示例中,如果我想指定
meta
,那么我必须传递当前data
的数据类型,而不是我分配后预期的类型:相关问题 更多 >
编程相关推荐