如何根据字典中的布尔值过滤pandas.Dataframe的行

时间:2019-05-20 09:35:21

标签: python python-3.x python-3.7

我需要一种灵巧,快速的算法来删除熊猫数据框的所有行[10000:37],对于该行,我至少在双胞胎字典的每一列(对于每一行)中观察到布尔值False都指向该数据框(我的意思是,字典中的键等于数据帧的列名,而每个键的值都是布尔值的长度为9999的列表。)

即使考虑到将来的实现和程序修改,我也想轻松地应用此操作,从而避免对不同系列的值进行单独的操作。 我声明我不是专业程序员。谁能推荐一条合适的路线?

2 个答案:

答案 0 :(得分:0)

使用它作为示例数据框:

test_df = pd.DataFrame({ 'A': [True,True,True], 'B': [False,True,True], 'C' : [True,False,True], 'D' : [True,True,True]})

我们只希望在每列中包含True的第三行:

mask = test_df.all(axis=1)
keep_df = test_df[mask]

如果您只想检查字典中作为键的列:

d = { 'A': [1,2,3], 'C': [4,5,6] }
mask = test_df[d].all(axis=1)
keep_df = test_df[mask]

答案 1 :(得分:0)

在此我将假定字典和数据框具有不同的值,但共享相同的索引。换句话说,我假设数据帧的索引是RangeIndex(start=0, stop=10000, step=1)

在那种情况下,我将从双胞胎字典构建一个数据帧,并使用np.all来识别在任何列中至少具有False的行。

让我们将df称为数据帧,将twin称为孪生字典,代码可能是:

df_twin = pd.DataFrame(twin)
df_twin['to_drop'] = np.all(df_twin, axis=1)

df_clean = df.drop(df_twin.loc[~df_twin.to_drop].index)