企业数据筛选需求:提取近3年数据并优先选用audited类型
企业数据筛选需求与实现示例
需求说明
现有企业数据包含字段:企业编号、企业名称、年份、审计类型、数值。需按以下规则处理:
- 针对每家企业,筛选出其最新3年的记录
- 同一年份下,优先保留
audited(已审计)类型数据,舍弃provisional(临时)类型数据
示例输入
Sr no. number Company year type value 0 223 abc 2015 audited 3 1 223 abc 2018 provisional 4 2 223 abc 2019 audited 5 3 223 abc 2019 provisional 6 4 223 abc 2020 audited 7 5 224 def 2017 provisional 8 6 224 def 2016 audited 9 7 224 def 2017 audited 10 8 224 def 2018 audited 11 9 224 def 2019 provisional 12
预期输出
number Company year type 223 abc 2018 provisional 223 abc 2019 audited 223 abc 2020 audited 224 def 2017 audited 224 def 2018 audited 224 def 2019 provisional
实现方案(Python pandas)
通过以下步骤实现需求:
- 给审计类型设置优先级,
audited权重高于provisional - 按企业分组,对每组数据先按年份降序、类型优先级降序排序
- 每组内按年份去重,保留优先级高的记录
- 筛选出每组最新的3个年份记录
代码实现:
import pandas as pd # 构造示例数据 data = { 'number': [223,223,223,223,223,224,224,224,224,224], 'Company': ['abc','abc','abc','abc','abc','def','def','def','def','def'], 'year': [2015,2018,2019,2019,2020,2017,2016,2017,2018,2019], 'type': ['audited','provisional','audited','provisional','audited','provisional','audited','audited','audited','provisional'], 'value': [3,4,5,6,7,8,9,10,11,12] } df = pd.DataFrame(data) # 标记审计类型优先级 df['type_priority'] = df['type'].map({'audited': 2, 'provisional': 1}) # 排序并去重:同企业同年份保留优先级高的记录 df_sorted = df.sort_values(by=['number', 'year', 'type_priority'], ascending=[True, False, False]) df_deduplicated = df_sorted.drop_duplicates(subset=['number', 'year'], keep='first') # 提取每组最新3年数据 result = df_deduplicated.groupby('number').head(3) # 输出指定列 print(result[['number', 'Company', 'year', 'type']].to_string(index=False))
内容的提问来源于stack exchange,提问作者Sanket B.
相关产品推荐
相关产品推荐

