簡體   English   中英

從 dataframe 過濾行,匹配字符串對 [str.contains() AND 操作 - Python、Pandas]

[英]Filter rows from dataframe with matching pairs of strings [str.contains() AND Operation - Python, Pandas ]

我需要從包含匹配字符串對的 dataframe 中過濾行。 例如,如果以下實例在僅過濾 ID 1 和 2 的數據時將保留為 3,則“0 月”條目沒有對應的“3 月”:

df = pd.DataFrame({'ID':[1,2,3,1,2,1], 'Period':['0 Month','0 Month','0 Month','3 Month','3 Month','6 Month']})

OR 操作可以很容易地用於過濾 2 個字符串,如下所示,但是如果沒有必要的對,它不會刪除 ID。

df = df[(df["Period"].str.contains("0 Month")) | (df["Period"].str.contains("3 Month"))] 
df

因此,我嘗試使用 AND 運算符來滿足此需求,但返回的是一個空的 dataframe:

df = df[(df["Period"].str.contains("0 Month")) & (df["Period"].str.contains("3 Month"))] 
df

您可以nunique groupby來計算唯一“周期”的數量並過濾具有超過 1 個唯一“周期”值的行:

out = df[df.groupby(['ID', (df["Period"].str.contains("0 Month") | df["Period"].str.contains("3 Month"))])['Period'].transform('nunique') > 1]

請注意,而不是| 你可以使用isin

out = df[df.groupby(['ID', df["Period"].isin(['0 Month', '3 Month'])])['Period'].transform('nunique') > 1]

或組合字符串以匹配內部str.contains

out = df[df.groupby(['ID', df["Period"].str.contains('0|3')])['Period'].transform('nunique') > 1]

Output:

   ID   Period
0   1  0 Month
1   2  0 Month
3   1  3 Month
4   2  3 Month

暫無
暫無

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

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