簡體   English   中英

根據各列的 True 或 False 值過濾行

[英]Filtering rows based on True or False values of various columns

(英語不是我的母語,我會盡力解釋我的疑問)

我有一個包含應用程序數據的 Dataframe,我想將其分成兩個其他 DF,第一個包含此應用程序的高級用戶,另一個包含數據的 rest。

成為高級會員的條件是在確定的列上至少有一個 True 值,否則,非高級會員在以下列任何一個上都沒有 True 值:

list_of_columns = [column1, column2, column3, column4, ..., columnN]

我讓用戶的 df 做:

for column in list_of_columns:
    if list_of_columns.index(column) == 0:
        users_df = df.loc[data[column] == True]
    else:
        users_df = pd.concat([users_df, df.loc[data[column] == True]])
users_df = users_df.drop_duplicates()

我可以得到另一個, non_users_df 做這樣的事情:

non_users_df = df.loc[(df[column1] == False) &
                                         (data[column1] == False) &
                                         (data[column2] == False) &
                                         (data[column3] == False) &
                                         (data[...] == False) &
                                         (data['columnN'] == False)]

我對構建 users_df 的方式感到滿意,但我認為必須有另一種方式來獲取 non_users_df,特別是因為條件中有很多列(即使是我讓我得到正確 df 的方式)。

有人可以幫我嗎? 非常感謝

下面是兩個更優雅的解決方案:

# Leaving rows if one True exists
users_df = df[~((~df).all(axis=1))]

# Leaving rows that are all False
non_users_df = df[((~df).all(axis=1))]

如果您希望僅對數據集中的某些列制定標准:

cols = ['column1', 'column2']

# Leaving rows if one True exists
users_df = df[~((~df[cols]).all(axis=1))]

# Leaving rows that are all False
non_users_df = df[((~df[cols]).all(axis=1))]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM