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

如何在Pandas中按Symbol分组统计Action为'E'的数量并映射到df2?

解决方案

步骤1:计算每个Symbol对应的'E'动作数量

你可以通过两种简洁方式实现统计:

方式一:先过滤再分组统计

先筛选出Action等于'E'的行,再按Symbol分组并统计每组的行数:

# 计算每个Symbol的'E'数量
e_count_series = df[df['Action'] == 'E'].groupby('Symbol').size()

方式二:分组后直接统计符合条件的数量

通过分组后对Action列应用条件判断,再求和(布尔值True等价于1,False等价于0,求和即得到符合条件的数量):

e_count_series = df.groupby('Symbol')['Action'].apply(lambda x: (x == 'E').sum())
# 或者更简洁的写法
e_count_series = df.groupby('Symbol')['Action'].agg(lambda x: x.eq('E').sum())

步骤2:将统计结果映射到df2

使用map方法将e_count_series中的值匹配到df2的Symbol列:

df2['CountE'] = df2['Symbol'].map(e_count_series)

如果df2中存在df里没有的Symbol,映射后会得到NaN,可以用fillna(0)将其替换为0:

df2['CountE'] = df2['Symbol'].map(e_count_series).fillna(0).astype(int)

完整示例代码

import pandas as pd

# 初始化原始数据框df
df = pd.DataFrame({
    'Action': ['E', 'B', 'S', 'E', 'S', 'B', 'E'],
    'Symbol': ['aaa', 'aaa', 'aaa', 'yyy', 'yyy', 'yyy', 'yyy'],
    'Price': [164, 167, 168, 173, 176, 178, 175]
})

# 初始化目标数据框df2
df2 = pd.DataFrame({'Symbol': ['aaa', 'yyy']})

# 计算统计值
e_count_series = df[df['Action'] == 'E'].groupby('Symbol').size()
# 映射到df2
df2['CountE'] = df2['Symbol'].map(e_count_series)

print(df2)

输出结果:

Symbol  CountE
0    aaa       1
1    yyy       2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:45:29