假设我有一个100系列浮动数据点的熊猫系列,我需要将它们放入10个相同宽的垃圾箱中,我需要访问第四个垃圾箱中的数据索引。那我尝试的是:
import pandas as pd; import numpy as np
np.random.seed(1)
s = pd.Series(np.random.randn(100))
cut = pd.cut(s, bins=10, labels=range(10))
fourth_bin = s[cut == 4]
fourth_bin
Out[101]:
9 -0.249370
12 -0.322417
13 -0.384054
16 -0.172428
26 -0.122890
28 -0.267888
31 -0.396754
40 -0.191836
51 -0.352250
53 -0.349343
54 -0.208894
63 -0.298093
65 -0.075572
71 -0.504466
76 -0.306204
80 -0.222328
81 -0.200758
92 -0.375285
96 -0.343854
dtype: float64
这不太自然,看起来甚至有点笨拙。例如,我可以避免手动设置labels
并从pd.cut(s, bins=10)
开始吗?这样我想做一些像
s[s in pd.cut(s, bins=10).categories[4]]
因为categories
是Interval
的列表,但这不起作用。
有没有更自然的方法来执行此操作,因此我不必手动设置labels
?
答案 0 :(得分:1)
pd.qcut
对于大小均匀的垃圾箱
np.random.seed(1)
s = pd.Series(np.random.randn(100))
cut = pd.qcut(s, 10, labels=False)
fourth_bin = s[cut == 4]
fourth_bin
16 -0.172428
18 0.042214
26 -0.122890
35 -0.012665
40 -0.191836
44 0.050808
54 -0.208894
65 -0.075572
81 -0.200758
97 0.043597
dtype: float64
pd.cut
对于均匀间隔的箱子
np.random.seed(1)
s = pd.Series(np.random.randn(100))
cut = pd.cut(s, 10, labels=False)
fourth_bin = s[cut == 4]
fourth_bin
9 -0.249370
12 -0.322417
13 -0.384054
16 -0.172428
26 -0.122890
28 -0.267888
31 -0.396754
40 -0.191836
51 -0.352250
53 -0.349343
54 -0.208894
63 -0.298093
65 -0.075572
71 -0.504466
76 -0.306204
80 -0.222328
81 -0.200758
92 -0.375285
96 -0.343854
dtype: float64