簡體   English   中英

如果任何列包含某個 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ,如何保持一行?

[英]How to keep a row if any column contains a certain substring?

我有一個 pandas DataFrame df:

import pandas as pd

# Create a Pandas dataframe from some data.
df = pd.DataFrame({'Var1': ['d', 'a --> b', 'e', 'c --> d'],
                   'Var2': ['a', 'e', 'a --> b', 'd'],
                   'Var3': ['c', 'd', 'a --> b', 'e']})

打印時看起來像這樣(供參考):

|   | Var1    | Var2    | Var3    |
|---|---------|---------|---------|
| 0 | d       | a       | c       |
| 1 | a --> b | e       | d       |
| 2 | e       | a --> b | a --> b |
| 3 | c --> d | d       | e       |
 

我想只保留包含值“-->”的第 1、2 和 3 行。 換句話說,我想刪除 dataframe 中至少不包含一個值為“-->”的列的所有行。

我知道如何只過濾一列, df[df['Var1'].str.contains('-->', regex=False)]就像給了我第 1 行和第 3 行。

但我不知道如何應用於所有列。 在這里這里閱讀了一些類似的案例,但不知道如何適應我的案例。

你能建議一種方法來 select 這些行嗎?

將所有列合二為一並搜索 substring:

df[df.sum(axis=1).str.contains('-->')]
#      Var1     Var2     Var3
#1  a --> b        e        d
#2        e  a --> b  a --> b

您可以使用它過濾掉它們。

df1= df[df.apply(lambda x: any(x.str.contains('-->')),axis=1)]
print (df1)

output 將是:

原裝DataFrame:

      Var1     Var2     Var3
0        d        a        c
1  a --> b        e        d
2        e  a --> b  a --> b
3        c        d        e

DF1:僅包含帶箭頭的行

      Var1     Var2     Var3
1  a --> b        e        d
2        e  a --> b  a --> b

嘗試.stack()與 boolean 索引。

s = df.stack().str.contains('-->').reset_index(1,drop=True)

df.loc[s[s].index.unique()]


      Var1     Var2     Var3
1  a --> b        e        d
2        e  a --> b  a --> b

暫無
暫無

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

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