用多个单值替换多个值列表的优雅方式
elegant way to replace multiple list of values with a multiple single value
我有一个如下所示的数据框
df = pd.DataFrame()
df['text'] = ['p', 'S', 'primary','PRI','SECONDARY', 'SEC', 'S', 'TERTIARY','T','third']
我想替换如下所示的值列表
a) 将 P
、PRIMARY
、PRI
替换为 primary
b) 将 S
、SECONDARY
、SEC
替换为 secondary
c) 将 T
、TERTIARY
、THIRD
替换为 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
避免多个 replace
的一个想法是使用 dictionary
并将其展平到另一个字典以获取列表值中的键,以便通过 Series.str.upper
:[=15 匹配将列转换为大写=]
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
我有一个如下所示的数据框
df = pd.DataFrame()
df['text'] = ['p', 'S', 'primary','PRI','SECONDARY', 'SEC', 'S', 'TERTIARY','T','third']
我想替换如下所示的值列表
a) 将 P
、PRIMARY
、PRI
替换为 primary
b) 将 S
、SECONDARY
、SEC
替换为 secondary
c) 将 T
、TERTIARY
、THIRD
替换为 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
避免多个 replace
的一个想法是使用 dictionary
并将其展平到另一个字典以获取列表值中的键,以便通过 Series.str.upper
:[=15 匹配将列转换为大写=]
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