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

如何不使用for循环对Pandas中同日期同值行的指定字段求和

高效实现Pandas分组计算需求

需求说明

针对给定的DataFrame,需要对**相同date和value**的分组,提取name2=1对应的buy_price,与name2=2对应的sell_price相加,最终输出x+y格式的字符串。

高效实现方案

避免使用Python循环,利用Pandas的向量式操作处理,大幅提升大数据集下的运行效率,以下提供两种可行方案:


方案1:使用透视表(pivot_table)

通过透视表直接按分组维度聚合所需字段,再生成结果字符串:

import pandas as pd

# 构造示例DataFrame
data = {
    'name': ['a', 'f', 'd', 'b', 'e', 'd'],
    'name2': [1, 2, 1, 2, 1, 2],
    'date': ['2-2-24', '2-2-24', '3-3-24', '3-3-24', '4-3-24', '4-3-24'],
    'value': [100, 100, 200, 200, 300, 300],
    'buy_price': [1, 2, 9, 5, 2, 5],
    'sell_price': [3, 4, 2, 7, 1, 6]
}
df = pd.DataFrame(data)

# 生成透视表,按date、value分组,提取对应字段
pivot_df = df.pivot_table(
    index=['date', 'value'],
    columns='name2',
    values={'buy_price': 'first', 'sell_price': 'first'}
).reset_index()

# 提取目标字段并生成结果字符串
buy_col = pivot_df[('buy_price', 1)]
sell_col = pivot_df[('sell_price', 2)]
result = buy_col.astype(str) + '+' + sell_col.astype(str)

# 输出结果
for line in result:
    print(line)

方案2:拆分合并子集

将name2=1和name2=2的行拆分为两个子集,按date和value合并后计算:

import pandas as pd

# 构造示例DataFrame(同方案1)
data = {
    'name': ['a', 'f', 'd', 'b', 'e', 'd'],
    'name2': [1, 2, 1, 2, 1, 2],
    'date': ['2-2-24', '2-2-24', '3-3-24', '3-3-24', '4-3-24', '4-3-24'],
    'value': [100, 100, 200, 200, 300, 300],
    'buy_price': [1, 2, 9, 5, 2, 5],
    'sell_price': [3, 4, 2, 7, 1, 6]
}
df = pd.DataFrame(data)

# 拆分出两个目标子集
df_name2_1 = df[df['name2'] == 1][['date', 'value', 'buy_price']]
df_name2_2 = df[df['name2'] == 2][['date', 'value', 'sell_price']]

# 按date和value合并子集
merged_df = pd.merge(df_name2_1, df_name2_2, on=['date', 'value'])

# 生成结果字符串并输出
result = merged_df['buy_price'].astype(str) + '+' + merged_df['sell_price'].astype(str)
for line in result:
    print(line)

效率说明

两种方案均采用Pandas内置的向量式运算,底层基于C实现,避免了Python层面的循环开销,在大数据集下的运行效率远高于手动循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:13