Python 创建新列时在Dask中高效使用If-Then方案
我有一个大约1100万行的csv,我正在读取到一个dask数据帧中。我正在尝试创建一个新列,它是if/then/else场景的结果。我在理解如何让它工作方面遇到了一些困难,同样重要的是,让它高效工作也很重要。我是熊猫/达斯克的新手 基本上这就是我尝试过的:从create column事件调用函数。这是我尝试过的一个简化示例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):
#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
returnsValueError: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