pandas:绘制箱内的平均值 - 需要格式化帮助
pandas: plot mean values within bins - formatting help needed
我正在做一些太阳系动力学模拟,并一直以此项目为借口自学一些python/pandas。生成的数据集有 1000 多条记录,其中包含每个相关天体的轨道倾角、偏心率等值。
我正在尝试使用 pandas 研究结果数据中约 1000 个天体 ('test particles') 的平均轨道倾角,作为半长轴的函数。
到目前为止,我一直在做的是:
1) 将数据读入数据帧
df = pd.read_csv('final.csv')
2) 将数据限制在半长轴值的范围内(模拟过程中的粒子 'spread out',但我想限制我的分析
cf = df[df.a.between(30,80)]
3) 绘制给定数量的箱子的倾角平均值
cf.groupby(pd.cut(cf.a, 80))['inc'].mean().plot()
这创建了一个可以接受的图,但在格式方面它有几个问题:除非它完全最大化以填满我的屏幕,否则 x 轴上的数字会被挤压在一起并重叠。它们也不完全是我想看到的:它们显示了 bin 的最大值和最小值,我更喜欢直接滴答 5s 或类似的东西。
pandas output from above command
我试过将值 (x=None, xticks=None)
传递给上面字符串的 plot()
部分,但这对结果图没有影响。 plot/output 可以通过我这样做的方式进行控制吗?
谢谢,
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)
,使所有 NaNs
0.
plot_values = group.B.mean().fillna(0)
我正在做一些太阳系动力学模拟,并一直以此项目为借口自学一些python/pandas。生成的数据集有 1000 多条记录,其中包含每个相关天体的轨道倾角、偏心率等值。
我正在尝试使用 pandas 研究结果数据中约 1000 个天体 ('test particles') 的平均轨道倾角,作为半长轴的函数。
到目前为止,我一直在做的是:
1) 将数据读入数据帧
df = pd.read_csv('final.csv')
2) 将数据限制在半长轴值的范围内(模拟过程中的粒子 'spread out',但我想限制我的分析
cf = df[df.a.between(30,80)]
3) 绘制给定数量的箱子的倾角平均值
cf.groupby(pd.cut(cf.a, 80))['inc'].mean().plot()
这创建了一个可以接受的图,但在格式方面它有几个问题:除非它完全最大化以填满我的屏幕,否则 x 轴上的数字会被挤压在一起并重叠。它们也不完全是我想看到的:它们显示了 bin 的最大值和最小值,我更喜欢直接滴答 5s 或类似的东西。
pandas output from above command
我试过将值 (x=None, xticks=None)
传递给上面字符串的 plot()
部分,但这对结果图没有影响。 plot/output 可以通过我这样做的方式进行控制吗?
谢谢,
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)
,使所有 NaNs
0.
plot_values = group.B.mean().fillna(0)