【问题标题】:Rename columns with similar strings - Pandas重命名具有相似字符串的列 - Pandas
【发布时间】:2020-06-07 16:25:39
【问题描述】:

我有一个 pandas df,其中包含前两列代表其他列的位置。但是,具体的字符串会根据输入数据而变化。所以我想使用字符串并替换为其他列。

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

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


【解决方案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])

【讨论】:

  • 干杯。谢谢@Sameeresque
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2019-06-24
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2022-07-06
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多