我有一個包含多列的資料框。其中一列(“BLOCKED_YES”)包含國家代碼字串,例如“CA CH HK EU UK DE”。國家代碼可以有隨機順序。
我想隔離包含禁止串列中所有元素的所有行。例如,如果禁令串列 = ['CA','US'],我想捕獲 BLOCKED_YES 列中同時存在這兩個元素(無論順序如何)的所有 df 行。
我目前有以下
df = df[['STATUS','BLOCKED_YES','NAME']]
ban_list= ['US','CA']
df2 = df[df['BLOCKED_YES'].isin(ban_list)]
在上述情況下,我得到一個 df,其中 BLOCKED_YES 列包含帶有 ban_list 中任何元素的字串,我想要包含串列中所有元素的行,而不僅僅是一個。
uj5u.com熱心網友回復:
我認為你最好使用sets 而不是串列,因為集合從概念上開始是無序的。
假設您的原始資料是:
import pandas as pd
df = pd.DataFrame([
(1, 'CA CH HK EU UK DE'),
(2, 'CA CH HK EU UK DE US')
], columns=['id', 'countries'])
你的禁令串列實際上是一個集合而不是一個串列:
ban_list= {'US','CA'}
您可以像這樣將每個單元格內容變成一個集合:
df['countries'].str.split(' ').apply(set)
然后用于set.issubset檢查是否所有元素都在中(即禁止串列是否是每個條目的子集)。與 鏈接在一起apply,可以非常簡潔:
df[df['countries'].str.split(' ').apply(set).apply(ban_list.issubset)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477290.html
上一篇:Flutter錯誤:“引數型別‘文本’不能分配給引數型別‘字串’。”
下一篇:如何移動字串中的空格?
