A B
a0 1
a0-2 2
a1 3
a2 4
a2-2 5
a3 6
a4 7
我想在箱子下面分组
df.B.sum
[a0~a0-2) 3
[a1~a1-2) 3
[a2~a2-2) 9
[a3~a3-2) 6
[a4~a4-2) 7
如何做到这一点...
请您参考如下方法:
您可以使用由 cut
创建的 Series
的 groupby
通过 A
列的第二个字母:
print (df.A.str[1:2].astype(int))
0 0
1 0
2 1
3 2
4 2
5 3
6 4
Name: A, dtype: int32
bins = [-1,0,1,2,5]
labels=['[a0~a0-2)','[a1~a1-2)','[a2~a2-2)','[a3~a4-2)']
s = pd.cut(df.A.str[1:2].astype(int), bins=bins, labels=labels)
print (s)
0 [a0~a0-2)
1 [a0~a0-2)
2 [a1~a1-2)
3 [a2~a2-2)
4 [a2~a2-2)
5 [a3~a4-2)
6 [a3~a4-2)
Name: A, dtype: category
Categories (4, object): [[a0~a0-2) < [a1~a1-2) < [a2~a2-2) < [a3~a4-2)]
df = df.groupby(s).B.sum().reset_index()
print (df)
A B
0 [a0~a0-2) 3
1 [a1~a1-2) 3
2 [a2~a2-2) 9
3 [a3~a4-2) 13
另一个与另一个答案类似的解决方案,只使用了map
功能:
d = {'a0': '[a0~a0-2)',
'a1': '[a1~a1-2)',
'a2': '[a2~a2-2)',
'a3': '[a3~a4-2)',
'a4': '[a3~a4-2)'}
df = df.groupby(df.A.str[:2].map(d)).B.sum().reset_index()
print (df)
A B
0 [a0~a0-2) 3
1 [a1~a1-2) 3
2 [a2~a2-2) 9
3 [a3~a4-2) 13