python-3.x - 在新的数据帧上自动提取两个Python字符串之间的相等性

标签 python-3.x pandas dataframe list

我有一个像这样的数据框:

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/

相关文章:

python - 与 Pandas 总结几个月

pandas simpleimputer 保留数据类型

python - 环境变量 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON

python - 只打印列表中包含某些字符的字符串

python - Pandas 中的记录数组是什么?

python - 如何从列中获取日期时间类型而不是时间戳?

python - 如何在GroupBy对象的每个组中删除某个索引处的行?

python - 为 Pandas 数据框创建新列的条件要求

python-3.x - Pandas DataFrame.empty() 给出 TypeError : 'bool' object is not callable

r - 展平数据框并将行移至列