如何将numpy.float64数据存入DataFrame?均值存储异常求助
循环计算DataFrame均值后仅保留最后一个值的问题分析及解决
问题背景
我有5个仅komoditas列取值不同的DataFrame,结构如下:
| tanggal | komoditas | harga |
|---|---|---|
| 1 | Beras Sembako | 12000 |
| 2 | Beras Sembako | 12000 |
| ... | Beras Sembako | ... |
| 31 | Beras Sembako | 11000 |
我用以下循环计算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可以更简洁高效地实现:
- 先将5个DataFrame合并成一个大的DataFrame:
combined_df = pd.concat(dfs, ignore_index=True)
- 按
tanggal分组,计算每组harga的均值:
df_rata = combined_df.groupby('tanggal')['harga'].mean().reset_index(name='Harga Rata')
这种方法不仅代码更简洁,运行效率也远高于手动循环,尤其是数据量较大时优势明显。
内容的提问来源于stack exchange,提问作者Skidud
相关产品推荐
相关产品推荐

