我有一个像这样的数据框:
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)
我想基于原始数据框创建另一个数据框,其中我只有重复的字符串部分。
我的想法是分割每个 /
,然后将数据帧的第一行与数据帧的其余部分(因此所有行)进行比较以检查是否相等。因此,我关于这个问题的最初示例的结果将是:
result = {'col1': [["a", "b", "c", "d"], ["b", "c", "d"], [""], ["y"], ["a", "y"]],
'id': [1, 2, 3, 4, 5]}
df_result = pd.DataFrame(data=result)
此外,我无法在没有错误的情况下构建这个函数......有什么想法吗?
最佳答案
您可以提取所有想要的部分(可以使用多种方法),然后仅保留重复的值,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
关于python-3.x - 在新的数据帧上自动提取两个Python字符串之间的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75793914/