Python中基于DataFrame统计各Symbol的预测次数与成功预测次数
解决方案
要生成你需要的df3,用pandas的分组聚合功能就能高效完成,代码如下:
import pandas as pd # 先模拟原数据方便验证(如果你的df1已经存在,这部分可以跳过) data = { 'SYMBOL': ['ABC', 'DEF', 'GHI', 'ABC'], 'prediction_succesful': ['Y', 'Y', 'Y', pd.NA], 'DATE': ['29-03-2018', '30-03-2018', '01-04-2018', '30-03-2018'], 'VALUE': [100, 96, 105, 55] } df1 = pd.DataFrame(data) # 生成df3的核心代码 df3 = df1.groupby('SYMBOL').agg( no_of_predictions=('SYMBOL', 'size'), no_of_succesful_predictions=('prediction_succesful', lambda x: (x == 'Y').sum()) ).reset_index().rename(columns={'SYMBOL': 'symbol'}) print(df3)
代码解释:
groupby('SYMBOL'):按股票代码分组,把相同SYMBOL的行归为一组agg(...):对每组做聚合计算:no_of_predictions=('SYMBOL', 'size'):统计每组的总行数,也就是每个Symbol的总预测次数no_of_succesful_predictions=('prediction_succesful', lambda x: (x == 'Y').sum()):遍历每组的prediction_succesful列,统计值为'Y'的数量(NaN会自动被排除,因为NaN == 'Y'返回False,不会计入总和)
reset_index():把分组用的SYMBOL从索引转为普通列rename(columns={'SYMBOL': 'symbol'}):把列名改成你要求的小写symbol
运行后df3的结果是:
symbol no_of_predictions no_of_succesful_predictions 0 ABC 2 1 1 DEF 1 1 2 GHI 1 1
内容的提问来源于stack exchange,提问作者doomsday
相关产品推荐
相关产品推荐

