给定数据框
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
