python - Pandas :在垃圾箱内绘制平均值 - 需要格式化帮助

标签 python pandas matplotlib plot bins

我正在做一些太阳系动力学模拟,并一直以此项目为借口自学一些 python/pandas。生成的数据集有 1000 多条记录,其中包含每个相关天体的轨道倾角、偏心率等值。

我正在尝试使用 pandas 来研究结果数据中约 1000 个物体(“测试粒子”)的平均轨道倾角,作为半长轴的函数。

到目前为止,我一直在做的是:

1) 将数据读入数据帧

df = pd.read_csv('final.csv')

2) 将数据限制在半长轴值的范围内(粒子在模拟过程中“散开”,但我想限制我的分析

cf = df[df.a.between(30,80)]

3) 绘制给定数量的 bins 的倾斜度平均值

cf.groupby(pd.cut(cf.a, 80))['inc'].mean().plot()

这创建了一个可以接受的图,但在格式方面它有几个问题:除非它完全最大化以填满我的屏幕,否则 x 轴上的数字会被挤压在一起并重叠。它们也不完全是我希望看到的:它们显示 bin 的最大值和最小值,我更喜欢直接滴答 5s 或类似的东西。

pandas output from above command

我尝试将值 (x=None, xticks=None) 传递给上面字符串的 plot() 部分,但这没有效果在结果图上。我这样做的方式是否可以控制绘图/输出?

谢谢,

G

最佳答案

当我想做这样的事情时,我直接去matplotlib。 我将用这个样本数据展示一个小例子:

df = pd.DataFrame([[1, 2], [2, 7], [3, 6], [4,7], [5,3]], columns=['A', 'B'])

我没有使用 pd.cut 进行切割,而是使用 np.linspace 进行切割。 所以

bins = np.linspace(0,5,4)
group = df.groupby(pd.cut(df.A, bins))

现在,为了绘制它,我想要垃圾桶的中间

plot_centers = (bins [:-1] + bins [1:])/2
plot_values = group.B.mean()

并绘制

plt.plot(plot_centers, plot_values)

你应该小心处理丢失的数据,即如果你有一个没有数据的容器。在这种情况下,您可以使用 fillna(0),使所有 NaN 都为 0。

plot_values = group.B.mean().fillna(0)

关于python - Pandas :在垃圾箱内绘制平均值 - 需要格式化帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47158443/

相关文章:

python - django-多语言和模板端语言之间的切换

python - 如何根据审计字段在 Pandas 中创建汇总行

python - 使用 pandas 读取包含许多命名列标签的 csv 文件

python - matplotlib 连接到主页/后退/前进按钮事件

python - 为什么我的 pyplot 直方图上的轴被切换?

python - 属性错误: module 'serial' has no attribute 'Serial'

python - 在 Swift 中导入 Python 代码和库

python - PyArrow 表 : Filter rows

Python 数据框 reshape

python - 如何在Python中强制绘图显示x轴值