gpt4 book ai didi

python - Pandas Dataframe,更简单的语法可以根据值的条件删除行

转载 作者:行者123 更新时间:2023-11-28 22:14:47 26 4
gpt4 key购买 nike

考虑像这样的 Pandas Dataframe:

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

给予:

   R1  R2
3 0 2
4 1 0
8 7 99

当我想通过我使用的值的条件删除一行时

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)

两者都 super 麻烦。您知道实现此目的的更简单语法吗?

例如,如果有类似 idrop 函数的东西,第二个选项将更具可读性:

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

编辑:

我曾假设 df = df[df['R1'] != 1] 的性能不如直接删除一行。 (巨大的数据库...)

最佳答案

不, bool 索引drop 更快,如果需要提高性能,请使用 numexpr:

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

perfplot.show(
setup=make_df,
kernels=[bi1, bi2,drop1,drop2,drop3,drop4,ne,q,ev],
n_range=[2**k for k in range(2, 25)],
logx=True,
logy=True,
equality_check=False,
xlabel='len(df)')

关于python - Pandas Dataframe,更简单的语法可以根据值的条件删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53277718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com