如何根据季度列内容筛选DataFrame中各Deal首季财务数据并合并为单列
提取每个Deal第一季度的Financial Data1并合并列的实现方法
没问题,我来帮你搞定这个需求!针对你给出的DataFrame,要提取每个Deal第一季度的Financial Data1并合并成单独一列,用pandas可以轻松实现,下面给你两种常用方法:
先修正并构造示例DataFrame
首先先把你给出的排版有点混乱的DataFrame整理成标准格式(方便后续测试):
import pandas as pd data = { 'Deal': [0, 1, 2, 1, 4, 7, 2, 5, 8], 'Year': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'Date': ['1991/1/1', '1991/1/1', '1991/1/1', '1992/1/1', '1992/1/1', '1992/1/1', '1993/1/1', '1993/1/1', '1993/1/1'], 'Financial Data1': [122, 122, 122, 85, 85, 85, 85, 85, 85], 'Financial Data2': [123, 123, 123, 90, 90, 90, 90, 90, 90], 'Financial Data3': [120, 120, 120, 80, 80, 80, 100, 100, 100], 'Quarter': [1, 2, 3, 1, 2, 3, 1, 2, 3] } df = pd.DataFrame(data)
方法一:直接筛选+合并(简单直观)
这种方法适合每个Deal只有一条第一季度记录的场景:
- 先筛选出
Quarter等于1的行,只保留Deal和Financial Data1两列 - 重命名列名方便识别,再合并回原DataFrame(如果不需要合并,只保留结果列也可以)
# 筛选Q1数据并整理列名 q1_data = df[df['Quarter'] == 1][['Deal', 'Financial Data1']].rename(columns={'Financial Data1': 'Q1_Financial_Data1'}) # 合并回原DataFrame(如果只需要单独一列,直接用q1_data即可) merged_df = df.merge(q1_data, on='Deal', how='left')
方法二:分组提取(灵活处理多场景)
如果你的数据中存在同一个Deal对应多个第一季度记录(比如不同年份),可以用分组的方式灵活处理(比如取第一个值、平均值等):
方式1:用groupby+apply提取
# 按Deal分组,提取每个组中Q1的Financial Data1(取第一个匹配值) df['Q1_Financial_Data1'] = df.groupby('Deal').apply( lambda group: group[group['Quarter'] == 1]['Financial Data1'].iloc[0] ).reset_index(drop=True)
方式2:高效索引匹配(性能更优)
如果数据量较大,这种方式比apply更高效:
# 先标记Q1的行,然后建立Deal到对应Financial Data1的映射 q1_mask = df['Quarter'] == 1 deal_q1_map = df.loc[q1_mask].set_index('Deal')['Financial Data1'] # 用映射给原DataFrame添加新列 df['Q1_Financial_Data1'] = df['Deal'].map(deal_q1_map)
两种方法最终都会得到一个包含新列Q1_Financial_Data1的DataFrame,每一行对应所属Deal的第一季度Financial Data1值。
内容的提问来源于stack exchange,提问作者Elias K.
相关产品推荐
相关产品推荐

