给定数据框
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
的所有相应行。
答案 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