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)