用列表中的子字符串替换“熊猫"列中的字符串

问题描述:

我有一个DF:

DF
camp, value
asd_abcd_gr_yxz_aaaa, 5
efgh_kr_ijk, 10
hjssaasd_kr_adsad, 15
asdas_kr_asd, 2
asd_fr_asda_bb_bbbbbbb, 12
adklasdj_gr_asdsad, 3

更长的时间.

与列表[_gr_, _kr_, _fr_, etc..]中的元素进行比较之后,我希望结果为

After comparing with elements in list [_gr_, _kr_, _fr_, etc..] I want the result to be

DF
camp, value
gr, 8
kr, 27
fr, 12

最好尽可能短而不会循环通过DF.该列表比_gr_, _kr_, _fr_

preferably as short as possible without looping through the DF. The list is much longer than _gr_, _kr_, _fr_

提前谢谢!

您可以尝试 loc :

You can try str.contains with loc:

print df
                 camp  value
0         abcd_gr_yxz      5
1         efgh_kr_ijk     10
2   hjssaasd_kr_adsad     15
3        asdas_kr_asd      2
4         asd_fr_asda     12
5  adklasdj_gr_asdsad      3

ABR = ['_gr_', '_kr_', '_fr_']

for x in ABR:
    df.loc[df['camp'].str.contains(x), 'camp'] = x
print df 
   camp  value
0  _gr_      5
1  _kr_     10
2  _kr_     15
3  _kr_      2
4  _fr_     12
5  _gr_      3

print df.groupby('camp')['value'].sum().reset_index()
   camp  value
0  _fr_     12
1  _gr_      8
2  _kr_     27

str.extract str.strip :

ABR = ['_gr_', '_kr_', '_fr_']

s = '(' + '|'.join(ABR) + ')'
print s
(_gr_|_kr_|_fr_)

df['camp'] = df['camp'].str.extract(s, expand=False)

df = df.groupby('camp', as_index=False)['value'].sum()
df['camp'] = df['camp'].str.strip('_')
print df
  camp  value
0   fr     12
1   gr      8
2   kr     27