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

Python基于条件规则重命名DataFrame中重复的未披露投资者名称

问题说明

现有存储不同公司各融资轮次未披露投资者信息的Pandas DataFrame,样例数据如下:

Company_ID  Customer_ID  Investor_type  Round      Dummy    
    amazon  Undisclosed       A          1          1   
    amazon  Undisclosed       B          2          1   
    amazon  Undisclosed       B          3          0   
    amazon  Undisclosed       A          3          0   
    amazon  Undisclosed       B          4          0   
    amazon  Undisclosed       B          4          1   
    amazon  Undisclosed       B          4          1   
    amazon  Undisclosed       B          5          0   
    amazon  Undisclosed       B          5          0   
    amazon  Undisclosed       B          5          0   
    amazon  Undisclosed       B          5          1   
    Apple   Undisclosed       A          1          1   
    Apple   Undisclosed       B          2          1   
    Apple   Undisclosed       B          3          0   
    Apple   Undisclosed       A          3          0   
    Apple   Undisclosed       B          4          0   
    Apple   Undisclosed       B          4          1   
    Apple   Undisclosed       B          4          1   

需求规则:

  • Dummy=1时为新增投资者,Customer_ID需按格式Undisclosed_序号命名
  • Dummy=0时为已有投资者,Customer_ID沿用对应公司、对应投资者类型的历史编号
  • 序号支持两种规则:跨公司全局连续计数、每家公司独立从1开始计数

预期输出样例:

Company_ID  Customer_ID  Investor_type  Round      Dummy    
    amazon  Undisclosed_1     A          1          1   
    amazon  Undisclosed_2     B          2          1   
    amazon  Undisclosed_2     B          3          0   
    amazon  Undisclosed_1     A          3          0   
    amazon  Undisclosed_2     B          4          0   
    amazon  Undisclosed_3     B          4          1   
    amazon  Undisclosed_4     B          4          1   
    amazon  Undisclosed_2     B          5          0   
    amazon  Undisclosed_3     B          5          0   
    amazon  Undisclosed_4     B          5          0   
    amazon  Undisclosed_5     B          5          1   
    Apple   Undisclosed_6     A          1          1   
    Apple   Undisclosed_7     B          2          1   
    Apple   Undisclosed_7     B          3          0   
    Apple   Undisclosed_6     A          3          0   
    Apple   Undisclosed_7     B          4          0   
    Apple   Undisclosed_8     B          4          1   
    Apple   Undisclosed_9     B          4          1   
实现方案

不需要写多重循环,用Pandas内置的向量化操作就能高效实现,核心逻辑是先给新增投资者生成序号,再给存量投资者填充历史序号:

import pandas as pd

# 构造样例数据,实际使用时替换为你自己的DataFrame即可
data = {
    'Company_ID': ['amazon']*11 + ['Apple']*7,
    'Customer_ID': ['Undisclosed']*18,
    'Investor_type': ['A','B','B','A','B','B','B','B','B','B','B','A','B','B','A','B','B','B'],
    'Round': [1,2,3,3,4,4,4,5,5,5,5,1,2,3,3,4,4,4],
    'Dummy': [1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,0,1,1]
}
df = pd.DataFrame(data)

# 1. 先按公司、融资轮次排序,保证时间顺序正确,避免序号混乱
df = df.sort_values(by=['Company_ID', 'Round'], ignore_index=True)

# 2. 生成序号:如果需要跨公司全局连续计数,用这行
df['seq'] = df['Dummy'].cumsum()
# 如果需要每家公司独立计数,注释上一行,替换为下面这行即可
# df['seq'] = df.groupby('Company_ID')['Dummy'].cumsum()

# 3. 按【公司+投资者类型】分组,前向填充存量投资者的序号(Dummy=0的行)
df['seq'] = df.groupby(['Company_ID', 'Investor_type'])['seq'].ffill()

# 4. 生成最终的Customer_ID,删除辅助列
df['Customer_ID'] = 'Undisclosed_' + df['seq'].astype(str)
df = df.drop(columns=['seq'])

# 输出结果
print(df)

运行上述代码后得到的结果和预期样例完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:24:03