Skip to main content
 首页 » 编程设计

python之如何在 Pandas 数据框中按字母剪切和分组

2024年10月01日1daizhj

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 创建的 Seriesgroupby通过 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