如何按标准一一过滤列(Python)

时间:2018-08-15 09:52:06

标签: python pandas

我正在处理调查数据,并被要求使用每列的条件提取数据。(即df中“未命名:277”列的值必须为TRUE,因此“未命名:308”列依此类推,直到“ Unnamed:457”列。)我做了下面的代码,但感觉一点都不实用。有没有更好的方法可以通过Python完成?
先感谢您。 this link is the df has been returned to a boolean type

df1 = df[df["Unnamed: 277"] & (df['Unnamed: 308']) & 
(df['Unnamed: 311']) & (df['Unnamed: 314']) & (df['Unnamed: 317']) & 
(df['Unnamed: 320']) & (df['Unnamed: 3267']) & (df['Unnamed: 3312']) 
& (df['Unnamed: 3367']) & (df['Unnamed: 3412']) & (df['Unnamed: 3467']) 
& (df['Unnamed: 3512']) & (df['Unnamed: 3567'])
& (df['Unnamed: 3612']) & (df['Unnamed: 3667']) & (df['Unnamed: 3712']) 
& (df['Unnamed: 400']) & (df['Unnamed: 457'])]

1 个答案:

答案 0 :(得分:1)

假设您希望按给定的列列表进行过滤,这些列的 all 必须为True,则可以对布尔数据框/数组使用矢量化功能。

具体来说,您需要在axis=1上使用pd.DataFrame.all,以确保您的逻辑按行应用。

L = ['Unnamed: 277', 'Unnamed: 308', 'Unnamed: 311', ...]

df_filtered = df[df[L].all(1)]