Python Pandas多字段分组统计:排除历史已出现投资者的唯一值计数
解决方法
实现思路
- 先按
ID分组,标记出每个投资者在对应ID下是否为首次出现,过滤掉非首次出现的投资者记录 - 再对过滤后的结果按
ID和Round分组,统计投资者数量即可得到每轮次的新增唯一投资者数
完整代码示例
import pandas as pd # 构造测试数据 data = { 'ID': ['X','X','X','X','Y','Y','Y','Y','Y'], 'Round': [1,2,2,3,1,1,1,2,2], 'Investor': ['A','A','B','A','A','B','C','B','D'] } df = pd.DataFrame(data) # 筛选每个ID下首次出现的投资者记录 df_first = df[~df.groupby('ID')['Investor'].duplicated()] # 按ID、Round分组统计新增投资者数量 result = df_first.groupby(['ID', 'Round'])['Investor'].count() print(result)
输出结果
ID Round X 1 1 2 1 Y 1 3 2 1 Name: Investor, dtype: int64
输出完全符合需求:X的第1轮新增1个投资者A,第2轮新增1个投资者B,第3轮没有新增投资者;Y的第1轮新增3个投资者A、B、C,第2轮新增1个投资者D。
如果需要保留所有ID+Round的组合,没有新增投资者的轮次展示为0,可以在统计后补充如下代码:
all_index = pd.MultiIndex.from_product([df['ID'].unique(), df['Round'].unique()], names=['ID', 'Round']) result = result.reindex(all_index, fill_value=0)
内容的提问来源于stack exchange,提问作者Hassan33
相关产品推荐
相关产品推荐

