如何遍历Pandas DataFrame列并拼接序号生成唯一UID
解决方案
你可以通过pandas的分组计数功能快速实现需求,步骤如下:
- 生成分组内的序号:对
concat列分组后,使用cumcount()获取每个组内的行索引(从0开始),加1后得到每组的序号 - 拼接生成唯一ID:将
concat列与序号用-连接,得到uid列
完整代码示例
import pandas as pd # 构造示例数据 data = { 'FY': [2015]*10, 'group': ['GROUP_A']*5 + ['GROUP_B']*5, 'item': [1,1,1,10,7,23,23,23,23,21], 'concat': ['2015-GROUP_A-1','2015-GROUP_A-1','2015-GROUP_A-1','2015-GROUP_A-10','2015-GROUP_A-7', '2015-GROUP_B-23','2015-GROUP_B-23','2015-GROUP_B-23','2015-GROUP_B-23','2015-GROUP_B-2'] } df = pd.DataFrame(data) # 生成组内序号并拼接uid df['uid'] = df['concat'] + '-' + (df.groupby('concat').cumcount() + 1).astype(str) # 查看结果 print(df)
结果说明
运行后会得到你期望的输出:每个concat值对应的行被依次编号,拼接后形成唯一的uid,比如重复3次的2015-GROUP_A-1会生成2015-GROUP_A-1-1/2/3,单次出现的则生成xxx-1。
另外注意你原始数据中最后一行的concat值是2015-GROUP_B-2,但期望结果里是2015-GROUP_B-21,如果是数据录入错误,只需要修正原始数据的concat列即可,代码逻辑不受影响。
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

