使用相似的字符串重命名列-熊猫

问题描述 投票:0回答:2

我有一个pandas df,其中前两列代表其他cols。但是,特定的字符串将根据输入数据而变化。因此,我想使用字符串并替换为其他列。

使用下面的df,我们有相似的列名。

df = pd.DataFrame({ 
        'Foo_somestring' : ['X','X','X'],  
        'Bar bar_somestring' : ['X','X','X'],                               
        'GroupA_somestring' : ['X','X','X'],                   
        'GroupB_somestring' : ['X','X','X'],  
        'GroupA_some_other_string' : ['X','X','X'],                   
        'GroupB_some_other_string' : ['X','X','X'],  
                })

目标输出:

df = pd.DataFrame({ 
        'Foo_somestring' : ['X','X','X'],  
        'Bar bar_somestring' : ['X','X','X'],                               
        'Foo_somestring' : ['X','X','X'],                   
        'Bar bar_somestring' : ['X','X','X'],  
        'Foo_some_other_string' : ['X','X','X'],                   
        'Bar bar_some_other_string' : ['X','X','X'],  
                })

不能在这里使用df.rename,因为foobar将是可变的,因为它们将根据输入数据集而变化。例如,前两个col值可以是DogCat

我必须手动确定col values,然后替换。如果我必须多次完成该过程,这将变得效率低下。

所以我需要的东西不是硬编码的,但需要前两个col values

python pandas rename
2个回答
1
投票

您是否尝试过此方法:

groups={'GroupA':df.columns[0].split('_')[0],'GroupB':df.columns[1].split('_')[0]}
for group in groups:
    df.columns=df.columns.str.replace(group, groups[group])

0
投票

[不确定是否要使用字典替换,但是看是否可行-

import re
df = pd.DataFrame({ 
        'Foo_somestring' : ['X','X','X'],  
        'Bar bar_somestring' : ['X','X','X'],                               
        'GroupA_somestring' : ['X','X','X'],                   
        'GroupB_somestring' : ['X','X','X'],  
        'GroupA_some_other_string' : ['X','X','X'],                   
        'GroupB_some_other_string' : ['X','X','X'],  
                })
rename_dict={'GroupA':'Foo', 'GroupB':'Bar bar'}
new_col= [re.sub('|'.join(rename_dict.keys()), lambda x: rename_dict[x.group()], i) for i in df.columns.to_list()]
df.columns = new_col
© www.soinside.com 2019 - 2024. All rights reserved.