我有一个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
,因为foo
和bar
将是可变的,因为它们将根据输入数据集而变化。例如,前两个col值可以是Dog
和Cat
。
我必须手动确定col values
,然后替换。如果我必须多次完成该过程,这将变得效率低下。
所以我需要的东西不是硬编码的,但需要前两个col values
。
您是否尝试过此方法:
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])
[不确定是否要使用字典替换,但是看是否可行-
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