如何使用Pandas按ID分组统计各融资类型唯一值的出现次数
实现方案
你需要的是按公司维度统计各融资类型的出现次数,属于透视计数需求,两种可直接落地的实现方法如下:
前置说明
假设你的原始数据每行对应一条融资记录,至少包含company id、融资类型(示例列名取为financing_type)两个字段,示例原始数据构造代码如下:
import pandas as pd # 模拟和你输入表格结构一致的原始数据 df = pd.DataFrame({ 'company id': [1,1,1,1,1,2,2,2], 'financing_type': ['Equity','Equity','Debt','Debt','Debt','Debt','Private Placement','Private Placement'] })
方法1:使用pd.crosstab(最简实现)
pd.crosstab是专门用于统计分组频率的接口,一行代码即可得到结果:
# 统计公司id和融资类型的交叉计数 result = pd.crosstab(df['company id'], df['financing_type']).reset_index() # 可选:如果需要严格固定输出列的顺序、补全原始数据中未出现的融资类型,新增reindex逻辑 required_columns = ['company id', 'Equity', 'Debt', 'Private Placement'] result = result.reindex(columns=required_columns, fill_value=0)
方法2:使用groupby+unstack组合(适配你之前的尝试思路)
你之前尝试没得到预期结果,大概率是分组计数后没有处理空缺分类,或者透视轴配置错误,正确写法如下:
# 按公司id、融资类型分组计数,再把融资类型列转为表头,空缺值自动填0 result = df.groupby(['company id', 'financing_type'])\ .size()\ .unstack(fill_value=0)\ .reset_index() # 同样可以用reindex固定输出列结构 required_columns = ['company id', 'Equity', 'Debt', 'Private Placement'] result = result.reindex(columns=required_columns, fill_value=0)
两种方法最终输出的结果均符合你的要求:
company id Equity Debt Private Placement 0 1 2 3 0 1 2 0 1 2
内容的提问来源于stack exchange,提问作者codr
相关产品推荐
相关产品推荐

