Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dask数据帧中的列滤波与乘法_Python_Python 3.x_Pandas_Dataframe_Dask - Fatal编程技术网

Python 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

我试图在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_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)中,就地更改数据似乎不是最简单的事情。