我有一個資料框列,其中所有值都采用串列格式(每列值一個串列,包含一個或多個專案)。
我想洗掉在這些串列中找到特定字串的行(列值可以是 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"]是我想要迭代
“互補”的列:如果在列值中找到該詞,則必須洗掉該行
如何改進上面的代碼以使其正常作業?
謝謝大家
uj5u.com熱心網友回復:
只需首先屏蔽包含使用的單詞的行 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]
uj5u.com熱心網友回復:
可能引發一些新學習的不切實際的解決方案:
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())
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339441.html
上一篇:CPython串列實作細節
