Python 创建新列时在Dask中高效使用If-Then方案

Python 创建新列时在Dask中高效使用If-Then方案,python,pandas,conditional-statements,vectorization,dask,Python,Pandas,Conditional Statements,Vectorization,Dask,我有一个大约1100万行的csv,我正在读取到一个dask数据帧中。我正在尝试创建一个新列,它是if/then/else场景的结果。我在理解如何让它工作方面遇到了一些困难,同样重要的是,让它高效工作也很重要。我是熊猫/达斯克的新手 基本上这就是我尝试过的:从create column事件调用函数。这是我尝试过的一个简化示例 #var1 = 0 #var2 = 10 def find_situation: If (var1 == 0 and var2 > 10):

我有一个大约1100万行的csv,我正在读取到一个dask数据帧中。我正在尝试创建一个新列,它是if/then/else场景的结果。我在理解如何让它工作方面遇到了一些困难,同样重要的是,让它高效工作也很重要。我是熊猫/达斯克的新手

基本上这就是我尝试过的:从create column事件调用函数。这是我尝试过的一个简化示例

#var1 = 0
#var2 = 10

def find_situation:
    If (var1 == 0 and var2 > 10):
        print("Situation 1")
    elif var1 == 0 and var2 < 10:
        print("Situation 2")
    else:
        print("No Situation")

ddf['situation'] = ddf.apply(find_situation(ddf['ddfvar1'], ddf['ddfvar2']))

您可以使用
np。选择
进行矢量化方法

import pandas as pd
import numpy as np

np.random.seed(500)

df = pd.DataFrame({"var1":np.random.randint(0,20,10000000),
                   "var2":np.random.randint(0,25,10000000)})

df["result"] = np.select([(df["var1"]==0)&(df["var2"]>10),
                          (df["var1"]==0)&(df["var2"]<10)],  #list of conditions
                         ["Situation 1", "Situation 2"],     #list of results
                         default="No situation")             #default if no match

print (df.groupby("result").count())

#
                     var1     var2
result                        
No situation  9520776  9520776
Situation 1    279471   279471
Situation 2    199753   199753
将熊猫作为pd导入
将numpy作为np导入
np.随机种子(500)
df=pd.DataFrame({“var1”:np.random.randint(0,2010000000),
“var2”:np.random.randint(0,2510000000)})
df[“result”]=np.选择([(df[“var1”]==0)和(df[“var2”]>10),

(df[“var1”]==0)和(df[“var2”]谢谢@Henry Yik。这对dask数据帧有效吗?我想是的。以前没有使用过dask df,但看文档,它只是由较小的熊猫df组成,所以应该可以工作。好的。我会尝试一下,然后再回复你。如果有效,我也会标记为正确。dask通常与pd兼容,但不总是。我不能似乎在注释中使用了一个反勾号、三个反勾号或三个平铺号的代码块。叹气。这是一个要点。我收到了一个默认值错误。
default=0
returns
ValueError:condlist中的无效条目0:应该是布尔ndarray
import pandas as pd
import numpy as np

np.random.seed(500)

df = pd.DataFrame({"var1":np.random.randint(0,20,10000000),
                   "var2":np.random.randint(0,25,10000000)})

df["result"] = np.select([(df["var1"]==0)&(df["var2"]>10),
                          (df["var1"]==0)&(df["var2"]<10)],  #list of conditions
                         ["Situation 1", "Situation 2"],     #list of results
                         default="No situation")             #default if no match

print (df.groupby("result").count())

#
                     var1     var2
result                        
No situation  9520776  9520776
Situation 1    279471   279471
Situation 2    199753   199753