You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按Pandas中file唯一值分组生成path列表并应用公共前缀函数

没问题,这就帮你搞定这个需求,直接上完整的解决方案和解释:

完整代码示例

import pandas as pd
from itertools import takewhile

# 定义你提供的自定义函数
def allnamesequal(name):
    return all(n == name[0] for n in name[1:])

def commonprefix(paths, sep=';'):
    bydirectorylevels = zip(*[p.split(sep) for p in paths])
    return sep.join(x[0] for x in takewhile(allnamesequal, bydirectorylevels))

# 创建示例DataFrame
df = pd.DataFrame(
    [
        ["fileA", "Users;user;Downloads;folder1"],
        ["fileA", "Users;user;Downloads;folder2"],
        ["fileA", "Users;user;Downloads;folder1"],
        ["fileB", "Users;user;Documents;folder1"],
        ["fileB", "Users;user;Documents;folder1"],
        ["fileB", "Users;user;Downloads;folder1"]
    ],
    columns=['file', 'path']
)

# 分组处理:生成path列表并计算共同前缀
result = df.groupby('file')['path'].agg(
    path_list=list,
    common_prefix=lambda x: commonprefix(x.tolist())
).reset_index()

# 打印结果
print(result)

运行结果

file                                           path_list          common_prefix
0  fileA  [Users;user;Downloads;folder1, Users;user;Down...  Users;user;Downloads
1  fileB  [Users;user;Documents;folder1, Users;user;Doc...           Users;user

代码解释

  1. 导入依赖与定义函数:先导入pandas和itertools.takewhile,再定义你提供的两个自定义函数,用于计算路径的共同前缀。
  2. 创建DataFrame:还原你给出的示例数据结构。
  3. 分组处理:
    • 用groupby('file')按文件名分组,聚焦path列的数据。
    • 通过agg()方法一次性完成两个需求:
      • path_list=list:将每个分组下的所有path值转换为字符串列表,完全匹配你要的每个file对应path列表的要求。
      • common_prefix=lambda x: commonprefix(x.tolist()):把分组后的path序列转为列表,传入自定义的commonprefix函数,计算出该组路径的共同前缀。
    • 最后用reset_index()把分组的file列从索引转为普通列,让结果格式更友好。

简化版(若只需要共同前缀)

如果不需要保留每个file对应的path列表,只需要共同前缀,可以简化代码:

common_prefix_result = df.groupby('file')['path'].apply(lambda x: commonprefix(x.tolist())).reset_index(name='common_prefix')
print(common_prefix_result)

运行结果:

file          common_prefix
0  fileA  Users;user;Downloads
1  fileB           Users;user

内容的提问来源于stack exchange,提问作者Saraha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:32:53