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

如何将numpy.float64数据存入DataFrame?均值存储异常求助

循环计算DataFrame均值后仅保留最后一个值的问题分析及解决

问题背景

我有5个仅komoditas列取值不同的DataFrame,结构如下:

tanggalkomoditasharga
1Beras Sembako12000
2Beras Sembako12000
...Beras Sembako...
31Beras Sembako11000

我用以下循环计算5个DataFrame中每日harga的均值:

for z in dfs:
    for x in tanggal:
        mean = z.loc[z['tanggal'] == x, 'harga'].mean()
        rata = [mean]
        print(rata)

其中dfs是5个DataFrame的集合,tanggal为1到31的数值范围。运行后能打印出一系列numpy.float64类型的均值,但用df_rata = pd.DataFrame(rata, columns =['Harga Rata'])转为DataFrame时,仅显示最后一个值,查看len(rata)发现变量只存储了1个值。


错误原因

核心问题是每次循环都重新赋值创建了新的rata列表:代码里的rata = [mean]这行,每一次循环都会把rata替换成一个只包含当前mean的新列表,之前循环得到的所有均值都会被覆盖,最后自然只剩最后一次循环的结果。


解决方法

方法1:修改循环逻辑,追加元素到列表

先初始化一个空列表,然后在循环中用append()方法把每个均值添加进去,而不是重新赋值:

# 先创建一个空列表用来存储所有均值
rata = []
for z in dfs:
    for x in tanggal:
        mean = z.loc[z['tanggal'] == x, 'harga'].mean()
        rata.append(mean)  # 把当前均值追加到列表末尾
        print(mean)

# 现在转换为DataFrame就会包含所有计算出的均值
df_rata = pd.DataFrame(rata, columns=['Harga Rata'])

方法2:用pandas内置方法简化计算(更高效)

如果你的需求是按tanggal分组计算每日的整体均值,完全不需要嵌套循环,用pandas的concat和groupby可以更简洁高效地实现:

  1. 先将5个DataFrame合并成一个大的DataFrame:
combined_df = pd.concat(dfs, ignore_index=True)
  1. 按tanggal分组,计算每组harga的均值:
df_rata = combined_df.groupby('tanggal')['harga'].mean().reset_index(name='Harga Rata')

这种方法不仅代码更简洁,运行效率也远高于手动循环,尤其是数据量较大时优势明显。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:20:56