簡體   English   中英

如何在 pandas Dataframe 列中找到常見子字符串?

[英]How can I locate common substrings in pandas Dataframe column?

我是 Python 的新手,我非常感謝有關如何在我的 dataframe 的列中找到常見 substring 的任何提示和提示。

我有一個包含視頻頻道和在那里觀看視頻的用戶的數據集,我想找出哪些頻道共享相同的觀眾並找到觀看者的 ID。

我的數據如下所示:

d = {'channel':[1, 2, 3], 'users':[['uid01', 'uid03'], ['uid02', 'uid03', 'uid07'], ['uid06', 'uid01']]}
df = pd.DataFrame(data=d)

數據示例

事實上,ID 的數量要高得多,大多數頻道都達到數百個。 頻道數量僅限於 9 個。

我希望每個頻道都有單獨的列,其值由觀看兩個頻道的用戶的 ID 表示。 預期的結果是這樣的:

result = {'channel':[1, 2, 3], 
      'users':[['uid01, uid03'], ['uid02', 'uid03', 'uid07'], ['uid06', 'uid01']], 
      '1': [['uid01', 'uid03'], ['uid03'], ['uid01']],
      '2': [['uid03'], ['uid02', 'uid03', 'uid07'], []],
      '3': [['uid01'], [], ['uid06', 'uid01']]}
df_result = pd.DataFrame(data=result)

預期結果

我的即時想法是用集合的交集來解決它,但我不知道應該怎么做。 到目前為止,我設法實現的只是一個 function 添加一個列:

def intersection(df, c):
intersecting= []
for n in range(0, 3):
    intersecting.append(set(df.users[n]).intersection(df.users[c]))
col = np.array(intersecting)
df['1'] = col
return df

但是,此 function 僅在我將其作為獨立的 function 直接調用時才有效,並且當我將其與 Pandas apply()一起使用時無法執行。 非常感謝您的建議!

您想為原始 dataframe 的每一行創建一個新列,因此最直接的方法是遍歷行並一一創建這些新列:

for c, u in zip(df.channel, df.users):
    df[str(c)] = df.users.apply(lambda x: sorted(list(set(x).intersection(set(u)))))

暫無
暫無

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

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