用列表中的子串替换潘达斯列中的字符串[英] Replace string in Pandas column by substring from list

本文是小编为大家收集整理的关于用列表中的子串替换潘达斯列中的字符串的处理方法,想解了用列表中的子串替换潘达斯列中的字符串的问题怎么解决?用列表中的子串替换潘达斯列中的字符串问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个 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..] 中的元素比较后,我希望结果为

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

最好在不循环 DF 的情况下尽可能短.该列表比 _gr_, _kr_, _fr_

长得多

提前致谢!

解决方案

你可以试试str.containsloc:

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.extractstr.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

本文地址:https://www.itbaoku.cn/post/1727779.html