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

如何用Pandas计算DataFrame连续行之间的平均值?

使用Pandas计算连续行平均值并实现居中绘图标签

当然可以!这在Pandas里实现起来相当简单,完全能满足你想要计算连续x轴位置的中间平均值、并把绘图标签放在两点中间的需求。

核心思路

要得到第2列中连续两行的平均值,我们可以利用Pandas的shift()函数对齐相邻行的数据,再进行均值计算。这样得到的结果刚好是两个原始x轴点的中间位置,直接就能用作绘图时的标签锚点。

具体实现步骤

  1. 创建示例数据
    先模拟你的数据场景,假设第2列是x_pos(对应你说的30行数据,索引0-29):
import pandas as pd
import matplotlib.pyplot as plt

# 模拟x轴位置数据
df = pd.DataFrame({'x_pos': [0.21, 0.42, 0.55, 0.73, 0.91, 1.08, 1.22, 1.39, 1.55, 1.71,
                             1.88, 2.05, 2.21, 2.37, 2.54, 2.70, 2.86, 3.03, 3.19, 3.36,
                             3.52, 3.69, 3.85, 4.01, 4.18, 4.34, 4.51, 4.67, 4.84, 5.00]})
  1. 计算连续行的中间平均值
    通过shift(-1)获取下一行的x_pos值,和当前行取平均,就能得到两点的中间位置:
# 计算相邻两行的平均值,生成新列x_mid
df['x_mid'] = (df['x_pos'] + df['x_pos'].shift(-1)) / 2

# 最后一行没有下一行数据,会生成NaN,直接删除该行
df = df.dropna(subset=['x_mid'])

此时x_mid列的第一个值就是(0.21+0.42)/2=0.31,完全符合你的示例需求。

  1. 绘图时使用中间位置作为标签锚点
    假设你有对应的y值数据,绘图时把x_mid作为x轴的位置,再设置对应的标签即可:
# 模拟y值数据(和x_mid行数对应,共29行)
df['y_values'] = [5, 8, 6, 9, 12, 10, 14, 11, 15, 17,
                  13, 16, 19, 18, 22, 20, 23, 21, 25, 24,
                  27, 26, 29, 28, 31, 30, 33, 32, 35]

# 绘制柱状图(宽度根据你的x轴间隔调整)
plt.bar(df['x_mid'], df['y_values'], width=0.15)

# 设置x轴标签,这里用原始x_pos的区间作为标签示例
plt.xticks(df['x_mid'], labels=[f"{a:.2f}-{b:.2f}" for a, b in zip(df['x_pos'], df['x_pos'].shift(-1).dropna())], rotation=45)

plt.xlabel("X轴中间位置")
plt.ylabel("Y值")
plt.title("标签居中的X轴绘图示例")
plt.tight_layout()
plt.show()

额外说明

  • 如果你的数据不需要删除NaN行,也可以尝试df['x_mid'] = df['x_pos'].rolling(window=2).mean().shift(-0.5),但shift(-1)的方法更直观易懂,适合新手快速上手。
  • 绘图时的width参数需要根据你x轴数据的间隔来调整,确保柱子不会重叠或过于分散。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:23:05