【问题标题】:How can I locate common substrings in pandas Dataframe column?如何在 pandas Dataframe 列中找到常见的子字符串?
【发布时间】:2022-01-14 18:02:31
【问题描述】:

我是 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() 一起使用时无法执行。非常感谢您的建议!

【问题讨论】:

    标签: python pandas substring intersection


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了!非常感谢,这比我的尝试更明智。
    猜你喜欢
    • 2020-12-23
    • 2020-02-23
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2021-05-04
    相关资源
    最近更新 更多