我有一个这样的数据框,

col1
1
2
3
2
2
3
1
1
2
3
1
1
3
3
1
1
3


当我计算

print df['col1'].value_counts(bins=2)

它给了我,

(0.997, 2.0]    11
(2.0, 3.0]       6
Name: col1, dtype: int64


效果不错。但是在索引中,它给出了(]的混合形式。
为什么会这样表现。因为我想将索引保留为如下所示的新列。

temp=pd.DataFrame(df['col1'].value_counts(bins=2).reset_index()).rename(columns={'index':'bin'})

有没有办法保持相同的括号“(”或“]”,还是应该用另一行代码来清除(替换)该括号?

请帮助了解问题。
提前致谢。

最佳答案

如果需要将Intervalindex转换为tuple,则可以使用:

df1 = df['col1'].value_counts(bins=2).reset_index().rename(columns={'index':'bin'})
df1['bins'] = [(x.left, x.right) for x in df1['bin']]
print (df1)
            bin  col1          bins
0  (0.997, 2.0]    11  (0.997, 2.0)
1    (2.0, 3.0]     6    (2.0, 3.0)


list s:

df1['bins'] = [[x.left, x.right] for x in df1['bin']]
print (df1)
            bin  col1          bins
0  (0.997, 2.0]    11  [0.997, 2.0]
1    (2.0, 3.0]     6    [2.0, 3.0]


另外,如果需要string

df1['bins'] = ['({}, {})'.format(x.left, x.right) for x in df1['bin']]
print (df1)
            bin  col1          bins
0  (0.997, 2.0]    11  (0.997, 2.0)
1    (2.0, 3.0]     6    (2.0, 3.0)


对于新列:

df1[['l', 'r']] = pd.DataFrame([(x.left, x.right) for x in df1['bin']])
print (df1)
            bin  col1      l    r
0  (0.997, 2.0]    11  0.997  2.0
1    (2.0, 3.0]     6  2.000  3.0

关于python - 带有bins参数的pandas value_counts,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49918511/

10-11 07:40