簡體   English   中英

Pandas:如何刪除列值與特定值匹配的行(所有值都是值列表)

[英]Pandas : How to drop a row where column values match with a specific value (all value are list of value)

我有一個數據框列,其中所有值都采用列表格式(每列值一個列表,包含一個或多個項目)。

我想刪除在這些列表中找到特定字符串的行(列值可以是 5 個項目列表,如果項目之一與特定字符串匹配,則必須刪除該行)

for row in df:
    for count, item in enumerate(df["prescript"]):
        for element in item:
            if "complementary" in element:
                df.drop(row)

df["prescript"]是我想要迭代的列
"complementary" : 如果在列值中找到該詞,則必須刪除該行

如何改進上面的代碼以使其正常工作?

謝謝大家

只需先使用Series.apply屏蔽包含單詞的行

word = "complementary"
word_is_in = df["prescript"].apply(lambda list_item: word in list_item)

然后使用布爾索引通過反轉布爾系列word_is_in來僅選擇不包含單詞的行

df = df[~word_is_in]

可能引發一些新學習的不切實際的解決方案:

df = pd.DataFrame(
    columns="   index    drug                 prescript ".split(),
    data= [
            [       0,      1,     ['a', 's', 'd', 'f'], ],
            [       1,      2,     ['e', 'a', 'e', 'f'], ],
            [       2,      3,               ['e', 'a'], ],
            [       3,      4,   ['a', 'complementary'], ],]).set_index("index", drop=True)

df.loc[
    df['prescript'].explode().replace({'complementary': np.nan}).groupby(level=0).agg(lambda x: ~pd.isnull(x).any())
]

暫無
暫無

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

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