【发布时间】:2020-10-12 09:52:23
【问题描述】:
目前我正在处理一个项目并遇到了一些效率问题。在某些时候,我有一个巨大的数据框,需要删除行。我的数据框包含两列,其值为“0”、“1”或其他 np.nan。
我需要删除第一列为“0”而另一列为“1”的所有行,反之亦然。我想保留所有其他组合。
我编写了一个可以完成这项工作的函数,但它的效率非常低并且需要很长时间。这是输入、我的功能和预期输出的示例。
data = {'val': ['a', 'b', 'c'],
'compare1': ['0', '0', '1'],
'compare2': ['0', None, '0']
}
df = pd.DataFrame (data)
df
> val compare1 compare2
> 0 a 0 0
> 1 b 0 None
> 2 c 1 0
我的功能:
def filter_df(df, colname1, colname2):
for index, row in df.iterrows():
if (row[colname1] == "0") and (row[colname2] == "1"):
df.drop(index, inplace=True)
if (row[colname1] == "1") and (row[colname2] == "0"):
df.drop(index, inplace=True)
return df
我想通过 fkt 获得的输出:
df_new = filter_df(df,'compare1', 'compare2')
df_new
> val compare1 compare2
> 0 a 0 0
> 1 b 0 None
如果您有使其更高效的想法,请告诉我 :-)。我很高兴得到各种帮助。
最好的选择
【问题讨论】:
标签: python pandas performance dataframe filter