根据另一列的部分名称在df列中求和值

时间:2018-03-30 01:37:40

标签: python regex pandas dataframe

给定数据框

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的所有相应行。

2 个答案:

答案 0 :(得分:3)

如果您的子字符串长度不同,请使用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

答案 1 :(得分:2)

Frame号码与''

replace