在Pandas中进行分箱和转换

3
我有下面的数据框:
A  B
1  1
4  1
5  1
6  2
8  3
15 4 

我希望将数据框进行分组和转换,使其变成以下格式。
range(A) sum(B)
[0,4)    2
[5,9)    6
[10,14)  0
[15,19)  4

我尝试使用groupby+Grouper,但我无法弄清如何进行分组。

我能问一下如何转换数据吗?

1个回答

4
您需要使用参数right=Falsecut函数,以便在进行groupby操作时不包括右侧边界:

特别感谢John Galt提供添加参数labels的建议。

print (pd.cut(df['A'], 
              bins=[0, 5, 10, 15, 20], 
              labels=['[0,4)', '[5,9)', '[10,14)', '[15,19)'], 
              right=False))
0      [0,4)
1      [0,4)
2      [5,9)
3      [5,9)
4      [5,9)
5    [15,19)
Name: A, dtype: category

df = df.groupby([pd.cut(df['A'], bins=[0, 5, 10, 15, 20], 
                        labels=['[0,4)', '[5,9)', '[10,14)', '[15,19)'], 
                        right=False)])
       .B.sum()
       .fillna(0)
       .reset_index()

df.columns = ['range(A)','sum(B)']
print (df)
  range(A)  sum(B)
0    [0,4)     2.0
1    [5,9)     6.0
2  [10,14)     0.0
3  [15,19)     4.0

1
你可以在 pd.cut 中添加 labels= 来实现所需的标记 -- pd.cut(df.A, [0, 5, 10, 15, 20], right=False, labels=['[0,4)', '[5,9)', '[10,14)', '[15,19)']) - Zero
1
@JohnGalt - 非常好的想法,给我一秒钟。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接