Pandas 获取数据帧中列=某个值的行分数的最快方法
熊猫Pandas 获取数据帧中列=某个值的行分数的最快方法,pandas,performance,dataframe,Pandas,Performance,Dataframe,熊猫df有一个名为Target的列 这是我的解决方案len(df[df['Target']==1])/len(df),它可以工作,但我想知道是否有更快的方法可以使用数据帧对象的形状函数 df[df['Target'] == 1].shape[0]/df.shape[0] 在提交了我的答案后,我对时间安排感到好奇,决定核实一下 我运行以下代码: import time for test in range(5): df = pd.DataFrame(np.random.randint(0,
df
有一个名为Target
的列
这是我的解决方案
len(df[df['Target']==1])/len(df)
,它可以工作,但我想知道是否有更快的方法可以使用数据帧对象的形状函数
df[df['Target'] == 1].shape[0]/df.shape[0]
在提交了我的答案后,我对时间安排感到好奇,决定核实一下
我运行以下代码:
import time
for test in range(5):
df = pd.DataFrame(np.random.randint(0,10,size=(10000, 4)), columns=list('ABCD'))
# My solution
def myfunc1():
df[df["A"] == 1].shape[0]/df.shape[0]
# Your solution
def myfunc2():
len(df[df['A'] == 1])/len(df)
# @anky solution
def myfunc3():
df['A'].eq(1).sum()/len(df)
n = 10000
t0 = time.time()
for i in range(n): myfunc1()
t1 = time.time()
t2 = time.time()
for i in range(n): myfunc2()
t3 = time.time()
t4 = time.time()
for i in range(n): myfunc3()
t5 = time.time()
total_1 = t1-t0
total_2 = t3-t2
total_3 = t5-t4
print(test, ":", total_1, total_2, total_3)
这是打印件:
0:4.102828025817871 4.083608150482178 2.5046629905700684
1:4.065492868423462 4.055856943130493 2.534034252166748
2:4.093224287033081 4.119946002960205 2.5002260208129883
3:4.10286808013916 4.086605072021484 2.5362727642059326
4:4.023838996887207 4.006290912628174 2.49902272442627
正如您所看到的@anky是最快的,其他两个依赖于数据集一个也可以获取布尔值的和,而不是屏蔽df,然后获取长度尝试:
df['Target'].eq(1).sum()/len(df)