pandas python在新 Dataframe 上自动提取两个字符串之间的相等性

t98cgbkg  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(113)

我有这样一个数据框:

d = {'col1': ["url/a/b/c/d", "url/b/c/d", "url/j/k", "url/t/y", 'url/r/a/y'],
     'id':   [1, 2, 3, 4, 5]}
df = pd.DataFrame(data=d)

我想在原始 Dataframe 的基础上创建另一个 Dataframe ,其中只有重复的字符串部分。
我的想法是在每个/上拆分,然后将 Dataframe 的第一行与 Dataframe 的其余行进行比较(因此所有行都是一行),以检查是否相等。因此,我最初的例子的结果将是:

result = {'col1': [["a", "b", "c", "d"], ["b", "c", "d"], [""], ["y"], ["a", "y"]],
          'id':   [1, 2, 3, 4, 5]}
df_result = pd.DataFrame(data=result)

此外,我不能建立这个功能没有错误...任何想法?
谢谢!

u7up0aaq

u7up0aaq1#

您可以提取所有需要的部分(可以使用多种方法),然后只保留重复的值,reindex添加缺少的空列表:

df['col1'] = (df['col1']
 .str.extractall('/([^/]+)')[0]
 .loc[lambda x: x.duplicated(keep=False)]
 .groupby(level=0).agg(list)
 .reindex(df.index, fill_value=[])
 )

输出:

col1  id
0  [a, b, c, d]   1
1     [b, c, d]   2
2            []   3
3           [y]   4
4        [a, y]   5

相关问题