Python dask数据帧中的列滤波与乘法
我试图在dask数据帧上复制以下操作,其中我必须根据列值过滤数据帧,并在此基础上乘以另一列 以下是熊猫的等价物-Python dask数据帧中的列滤波与乘法,python,python-3.x,pandas,dataframe,dask,Python,Python 3.x,Pandas,Dataframe,Dask,我试图在dask数据帧上复制以下操作,其中我必须根据列值过滤数据帧,并在此基础上乘以另一列 以下是熊猫的等价物- import dask.dataframe as dd df['adjusted_revenue'] = 0 df.loc[(df.tracked ==1), 'adjusted_revenue'] = 0.7*df['gross_revenue'] df.loc[(df.tracked ==0), 'adjusted_revenue'] = 0.3*df['gross_reve
import dask.dataframe as dd
df['adjusted_revenue'] = 0
df.loc[(df.tracked ==1), 'adjusted_revenue'] = 0.7*df['gross_revenue']
df.loc[(df.tracked ==0), 'adjusted_revenue'] = 0.3*df['gross_revenue']
我尝试在dask数据帧上执行此操作,但它不支持赋值
TypeError:“\u LocIndexer”对象不支持项分配
这对我有用-
df['adjusted_revenue'] = 0
df1 = df.loc[df['tracked'] ==1]
df1['adjusted_revenue'] = 0.7*df1['gross_revenue']
df2 = df.loc[df['tracked'] ==0]
df2['adjusted_revenue'] = 0.3*df['gross_revenue']
df = dd.concat([df1, df2])
然而,我希望有更简单的方法来做到这一点
谢谢 你应该使用,这对熊猫来说可能也是正确的选择;或者其中
。然而,为了保持和原始数据相似,这里使用了map\u分区
,您可以独立地处理数据帧的每一部分,而这些部分实际上是数据帧
def make_col(df):
df['adjusted_revenue'] = 0
df.loc[(df.tracked ==1), 'adjusted_revenue'] = 0.7*df['gross_revenue']
df.loc[(df.tracked ==0), 'adjusted_revenue'] = 0.3*df['gross_revenue']
return df
new_df = df.map_partitions(make_col)
这是Dask特有的问题。在分布式计算框架(如Dask)中,就地更改数据似乎不是最简单的事情。