【问题标题】:elegant way to replace multiple list of values with a multiple single value用多个单个值替换多个值列表的优雅方法
【发布时间】:2021-07-08 05:42:33
【问题描述】:

我有一个如下所示的数据框

df = pd.DataFrame()
df['text'] = ['p', 'S', 'primary','PRI','SECONDARY', 'SEC', 'S', 'TERTIARY','T','third']

我想替换如下所示的值列表

a) 将 PPRIMARYPRI 替换为 primary b) 将SSECONDARYSEC 替换为secondary c) 将TTERTIARYTHIRD 替换为third

我尝试了以下

df['text'] = df['text'].replace(['P','PRIMARY','PRI'],'primary')
df['text'] = df['text'].replace(['S','SECONDARY','SEC'],'secondary')
df['text'] = df['text'].replace(['T','TERTIARY','THIRD'],'tertiary')

但是有没有其他有效和优雅的方式来在一行中写这个?

我希望我的输出如下所示

     text
0   primary
1   secondary
2   primary
3   primary
4   secondary
5   secondary
6   secondary
7   tertiary
8   tertiary
9   tertiary

【问题讨论】:

    标签: python pandas dataframe replace series


    【解决方案1】:

    避免多个replace 的一个想法是使用dictionary 并将其展平为另一个字典,以获取列表值中的键,以便将Series.str.upper 匹配的列转换为大写:

    d = {'primary': ['P','PRIMARY','PRI'],
         'secondary':['S','SECONDARY','SEC'],
         'tertiary':['T','TERTIARY','THIRD']}
    
    
    d1 = {x: k for k, v in d.items() for x in v}
    df['text'] = df['text'].str.upper().replace(d1)
    print (df)
            text
    0    primary
    1  secondary
    2    primary
    3    primary
    4  secondary
    5  secondary
    6  secondary
    7   tertiary
    8   tertiary
    9   tertiary
    

    【讨论】:

    • 不区分大小写吗?
    • @TheGreat - 不幸的是,没有,需要将其转换为大写。
    猜你喜欢
    • 2010-10-05
    • 2022-01-22
    • 2021-08-13
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2020-06-15
    • 2019-07-04
    • 2020-10-08
    相关资源
    最近更新 更多