Skip to main content
 首页 » 编程设计

python之根据另一列的部分名称对 df 列中的值求和

2025年05月04日22开发

给定数据框

a       b 
foo123  5 
foo456  8 
bar234  1 
bar324  6 

如何根据 a 的前几个字符添加 b 的值?我正在寻找的输出是:

a    b 
foo  13 
bar  7 

a 列的条目太多,无法手动设置,因此像下面这样的内容将不起作用:

if df['a'].startswith('foo'): 
    sum(b) 

我在想更像是如果 df['a'] 有匹配的前三个字符,为 b 添加所有对应的行。

请您参考如下方法:

如果您的子字符串的长度不同,请使用str.extract,从a 中提取相关部分,然后使用它来执行groupby + sum 对 b 的操作:

# assuming your frame is df1 
df1.groupby(df1['a'].str.extract(r'^(\D+)', expand=False))['b'].sum().reset_index() 
 
     a   b 
0  bar   7 
1  foo  13 

为了更好的性能,先预分配a;

df1['a'] = df1['a'].str.extract(r'^(\D+)', expand=False) 
df1.groupby('a', as_index=False)['b'].sum() 
 
     a   b 
0  bar   7 
1  foo  13 

如果所有子串的大小都相同,就切片和groupby:

df1.groupby(df1['a'].str[:3])['b'].sum().reset_index() 
 
     a   b 
0  bar   7 
1  foo  13