You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python计算单个CSV文件中同股票同日期的市值平均值

解决方案:计算同一股票同一日期的市值平均值

没问题,我帮你搞定这个需求!你需要的是按股票代码(Ticker)和日期(Date)分组,计算每组的市值平均值,然后导出成新的CSV文件。下面是修改后的完整代码,我会一步步解释细节:

注意事项先说明

你的原始CSV用|作为分隔符,且字段后带有空格,读取时必须指定正确的分隔规则,否则会出现列名带空格、字段值异常的问题;另外你之前的drop_duplicates不需要保留,因为那些同一Ticker+Date但不同市值的行是计算平均值的有效数据,不能删除。

完整代码实现

import pandas as pd

# 读取CSV,指定分隔符为|,并跳过字段后的空格,避免列名/值带多余空格
df = pd.read_csv(data_market, sep='|', skipinitialspace=True)

# 筛选2003年1月1日之后的数据(保留你原有的逻辑)
df = df[(df['Date'] > '2003-01-01')]

# 核心操作:按Ticker和Date分组,计算每组市值的平均值
# 重置索引将分组字段从索引转为普通列,并重命名列名符合需求
result_df = df.groupby(['Ticker', 'Date'])['Marketcap'].mean().reset_index()
result_df = result_df.rename(columns={'Marketcap': 'Avg Marketcap'})

# 可选:如果需要将平均值转为整数(和你示例中的格式一致),添加此行
result_df['Avg Marketcap'] = result_df['Avg Marketcap'].round().astype(int)

# 将结果保存为新的CSV文件,同样用|作为分隔符,不写入索引列
result_df.to_csv('avg_marketcap_result.csv', sep='|', index=False)

代码细节解释

  • sep='|', skipinitialspace=True:正确解析你的CSV格式,解决|后带空格导致的列名异常问题
  • groupby(['Ticker', 'Date'])['Marketcap'].mean():按股票+日期的组合分组,对每组的市值字段计算平均值,这是实现需求的核心逻辑
  • reset_index():把分组用的TickerDate从索引转换为普通列,保证输出的CSV结构和你期望的一致
  • rename(columns=...):将默认的Marketcap列名改为你需要的Avg Marketcap
  • round().astype(int):把浮点型的平均值转为整数(你示例中AB的2010-02-14平均值实际是≈1243333,应该是笔误少写了一个3,这里可以根据你的需求调整取整规则)
  • to_csv(...):保存结果时指定分隔符为|index=False避免把索引列写入CSV文件

运行这段代码后,生成的CSV文件就会完全符合你期望的输出格式。

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

火山引擎 最新活动