如何解决使用 bins=0.2分数水平对 Pandas 数据框进行装箱,我应该怎么做?
我想在恒星的颜色-星等平面中水平合并数据。这是我的数据(红巨星)的样子: RGB stars in my sample
现在,我想将这些星星水平地放入小箱中(箱 = 0.2 或 0.3),即平行于给定的 X 轴。如您所见,我用于 bin 的数字不是整数。
这是我目前尝试过的:
f814w = RGB_stars['col42'] # These are the stars I want to bin
f814w_cut = pd.cut(f814w,bins=0.2) # using pd.cut with bins=0.2
"ValueError: bins
应该是一个正整数。"
我尝试的另一种方法是来自 pandas 的 df.sample,但我认为它对我正在使用的数据样本不能正常工作。我使用这种方法时获得的输出是随机顺序的,所以我找不到一种方法来确定拆分是在小 bin 中完成的(bins = 0.2 或 0.3)。
我应该怎么做才能将整列的 bins 数
解决方法
bins
指定要使用的 bin 数量。因此它必须是一个整数。查看您的数据,大小为 0.2
的 bin 将提供大约 15 个 bin。您可以通过两种方式指定:
我从有点像您的 f814w
系列的随机值开始:
>>> import numpy as np
>>> f814w
0 4.5
1 2.4
2 3.6
3 2.1
4 2.6
5 2.5
6 3.1
7 2.7
8 4.9
9 4.0
Name: col42,dtype: float64
要么计算 bin 的数量:
>>> bins = np.ceil((f814w.max() - f814w.min()) / .2)
>>> pd.cut(f814w,bins=int(bins))
0 (4.3,4.5]
1 (2.3,2.5]
2 (3.5,3.7]
3 (2.097,2.3]
4 (2.5,2.7]
5 (2.3,2.5]
6 (2.9,3.1]
7 (2.5,2.7]
8 (4.7,4.9]
9 (3.9,4.1]
Name: col42,dtype: category
Categories (14,interval[float64]): [(2.097,2.3] < (2.3,2.5] < (2.5,2.7] < (2.7,2.9] < ... <
(4.1,4.3] < (4.3,4.5] < (4.5,4.7] < (4.7,4.9]]
或者指定 bin 边缘(我觉得更容易):
>>> pd.cut(f814w,bins=np.arange(f814w.min(),f814w.max() + .2,.2))
0 (4.3,4.5]
1 (2.3,2.5]
2 (3.5,3.7]
3 NaN
4 (2.5,2.7]
5 (2.3,2.5]
6 (2.9,3.1]
7 (2.5,2.7]
8 (4.7,4.9]
9 (3.9,dtype: category
Categories (15,interval[float64]): [(2.1,2.9] < ... <
(4.3,4.9] < (4.9,5.1]]
这给出了完全相同的结果。请注意 + .2
的上限上的 np.arange()
,因为它在生成数字时排除了上限,就像 range()
一样。如果您可以将 f814w.min()
和 f814w.max()
替换为更多理论或至少估计的界限,那么第二个选项(指定 bin)效果更好:
>>> pd.cut(f814w,bins=np.arange(2,5.2,.2))
0 (4.4,4.6]
1 (2.2,2.4]
2 (3.4,3.6]
3 (2.0,2.2]
4 (2.4,2.6]
5 (2.4,2.6]
6 (3.0,3.2]
7 (2.6,2.8]
8 (4.8,5.0]
9 (3.8,4.0]
Name: col42,interval[float64]): [(2.0,2.2] < (2.2,2.4] < (2.4,2.6] < (2.6,2.8] < ... <
(4.2,4.4] < (4.4,4.6] < (4.6,4.8] < (4.8,5.0]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。