我需要一种灵巧,快速的算法来删除熊猫数据框的所有行[10000:37],对于该行,我至少在双胞胎字典的每一列(对于每一行)中观察到布尔值False都指向该数据框(我的意思是,字典中的键等于数据帧的列名,而每个键的值都是布尔值的长度为9999的列表。)
即使考虑到将来的实现和程序修改,我也想轻松地应用此操作,从而避免对不同系列的值进行单独的操作。 我声明我不是专业程序员。谁能推荐一条合适的路线?
答案 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)