簡體   English   中英

根據列中的不同條目過濾 pandas 數據幀(逗號分隔字符串列表)

[英]Filtering pandas data frame based on different entries in a column (list of comma-separated strings)

我有一個 Pandas DataFrame 我想過濾所有在“TCK”(逗號分隔的字符串列表)中有不同條目的“ID”,即所有條目都不相同。

我的 DataFrame 看起來像這樣:

df1 = pd.DataFrame({"ID": [1, 2, 3, 4],
        "TCK": [["AA, AA, AC"], ["LL, LL"], ["DD , DB, DF, DE"], ["LO , LO, LO, LO, LO, LO"]]})

所需的 output 應如下所示:

df2 = pd.DataFrame({"ID": [1, 3],
        "TCK": [["AA, AA, AC"],["DD , DB, DF, DE"]]})

我知道一種方法是首先將字符串拆分為新列(基於逗號),然后使用循環來識別不同的代碼。 但是,由於還會有 np.nans,這將是一個相當復雜的解決方案。

有誰知道這個問題的快速而優雅的解決方案?

您可以先拆分您的字符串並應用set來檢查該 set 是否有超過 1 個元素,即具有不同的元素:

tck = df1.TCK.apply(lambda x: [item.strip() for item in x[0].split(',')])
df1[tck.apply(lambda x: len(set(x)) > 1)]

使用str.extractall

m = df1['TCK'].str[0].str.extractall('(\w+)')[0].groupby(level=0).nunique().gt(1)

df1[m]

output:

   ID                TCK
0   1       [AA, AA, AC]
2   3  [DD , DB, DF, DE]

使用regex

df = pd.DataFrame({"ID": [1, 2, 3, 4],
        "TCK": [["AA, AA, AC"], ["LL, LL"], ["DD , DB, DF, DE"], ["LO , LO, LO, LO, LO, LO"]]})

df['TCK'] = [','.join(l) for l in df['TCK']]
df['TCK']= df['TCK'].replace(r'(\w+)(?:\W+\1\b)+$', None, regex=True)
df.dropna(inplace=True)
print(df.head())

output:

   ID              TCK
0   1       AA, AA, AC
2   3  DD , DB, DF, DE

暫無
暫無

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

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