Pandas Dataframe,更容易按条件删除值上的行

2024-10-01 15:49:02 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑一个Pandas数据帧,如下所示:

df = pd.DataFrame([[0,2],[1,0],[7,99]],index=[3,4,8], columns = ["R1","R2"])

给予:

^{pr2}$

当我想通过某个值的条件移除行时

df = df.drop(df[df["R1"] == 1].index)

或者

df = df.drop(df.index[np.where(df["R1"] == 1)[0]])

或者

df = df.drop(df.loc[df['R1'] == 1].index)

两者都是超级累赘。你知道一个更容易实现的语法吗?在

例如,如果有类似idrop函数的东西,第二个选项会更容易理解:

df = df.idrop(np.where(df["R1"] == 1)[0])

编辑:

我假设df = df[df['R1'] != 1]的性能不如删除一行。(庞大的数据库…)


Tags: columns数据dataframepandasdfindexnpwhere
1条回答
网友
1楼 · 发布于 2024-10-01 15:49:02

不,boolean indexingdrop更快,如果需要提高性能,请使用numepr

enter image description here

import perfplot, numexpr

def bi1(df):
    return df[df['R1'].values != 1]

def bi2(df):
    return df[df['R1'] != 1]

def drop1(df):
    return df.drop(df[df["R1"] == 1].index)

def drop2(df):
    return df.drop(df.index[df["R1"] == 1])

def drop3(df):
    return df.drop(df.loc[df['R1'] == 1].index)

def drop4(df):
    return df.drop(np.where(df["R1"] == 1)[0])


def ne(x):
    x = x['R1'].values
    return x[numexpr.evaluate('(x != 1)')]

def q(x):
    return x.query('R1 != 1')

def ev(x):
    return x[x.eval('R1 != 1')]


def make_df(n):
    df = pd.DataFrame({'R1':np.random.randint(100, size=n)})
    return df

^{2}$

相关问题 更多 >

    热门问题