如何在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
相关产品推荐
相关产品推荐

