如何用Pandas为DataFrame按字母序列生成对应有序文件名列?
解决方案:基于字母出现顺序生成递增文件名
这问题我之前处理过,用pandas的分组计数功能就能完美解决!核心逻辑是跟踪每个字母在DataFrame中的出现顺序,把字母和格式化后的递增序号拼接成目标文件名就行,步骤很清晰:
步骤1:准备原始数据
先把你的DataFrame构建出来(如果已经存在就跳过这步):
import pandas as pd df = pd.DataFrame({ 'num': [0, 1, 2, 2, 2, 2, 2], 'letter': ['I', 'P', 'I', 'B', 'P', 'B', 'I'] })
步骤2:计算每个字母的累计出现次数
用groupby按字母分组,再用cumcount()统计组内的出现顺序(注意cumcount从0开始,所以要加1得到从1开始的序号):
df['sequence'] = df.groupby('letter').cumcount() + 1
步骤3:拼接生成文件名
把字母、格式化后的4位序号和后缀拼接起来,生成file列:
df['file'] = df.apply(lambda row: f"{row['letter']}-{row['sequence']:04d}.jpg", axis=1)
步骤4:(可选)清理中间列
如果不需要保留sequence列,可以删掉:
df = df.drop('sequence', axis=1)
最终结果
运行完上面的代码后,你的DataFrame就会变成你想要的样子:
num letter file 0 0 I I-0001.jpg 1 1 P P-0001.jpg 2 2 I I-0002.jpg 3 2 B B-0001.jpg 4 2 P P-0002.jpg 5 2 B B-0002.jpg 6 2 I I-0003.jpg
原理说明
groupby('letter')把相同字母的行归为一组,确保我们只统计每个字母自己的出现次数;cumcount()给每组内的行按出现顺序编号,加1后得到从1开始的递增序号;f"{row['sequence']:04d}"把序号格式化为4位数字,不足的地方用0补全,正好匹配你给出的文件名格式。
内容的提问来源于stack exchange,提问作者tavalendo
相关产品推荐
相关产品推荐

