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

How can I locate common substrings in pandas Dataframe column?

我是 Python 的新手,如果有任何关于如何在我的数据帧的列中定位公共子字符串的技巧和提示,我将不胜感激。

我有一个包含视频频道和在那里观看视频的用户的数据集,我想找出哪些频道共享相同的观众并找到观看者的 ID。

我的数据是这样的:

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

Data Example

确实,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)

Expected result

我当时的想法是用集合的交集来解决它,但我不知道应该怎么做。 到目前为止,我设法实现的只是一个添加单列的功能:

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

但是这个函数只有当我作为独立函数直接调用它时才有效,而当我将它与Pandas apply()一起使用时无法执行。非常感谢您的建议!

您想为原始数据框的每一行创建一个新列,因此最直接的方法是遍历这些行并一一创建这些新列:

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