Python 根据此带掩码的数据帧中其他列中的特定值,更改数据帧中一列中的值(使用apply)
我有一个数据帧:Python 根据此带掩码的数据帧中其他列中的特定值,更改数据帧中一列中的值(使用apply),python,pandas,dataframe,pandas-apply,Python,Pandas,Dataframe,Pandas Apply,我有一个数据帧: df = pd.DataFrame({'col1': [69, 77, 88], 'col2': ['barf;', 'barf;', 'barfoo']}) print(df, '\n') col1 col2 0 69 barf; 1 77 barf; 2 88 barfoo 我还有选择功能: def selection_func(string): ''' Function
df = pd.DataFrame({'col1': [69, 77, 88],
'col2': ['barf;', 'barf;', 'barfoo']})
print(df, '\n')
col1 col2
0 69 barf;
1 77 barf;
2 88 barfoo
我还有选择功能:
def selection_func(string):
'''
Function returns a, if string is 'barf;'
'''
if string == 'barf;':
return 'a'
else:
return string
因此,我需要使用基于col1的条件更改col2中的特定值(不是全部):
condition = (df['col1'] == 69) | (df['col1'] == 88)
期望输出:
col1 col2
0 69 a
1 77 barf;
2 88 barfoo
在编写问题时找到了解决方案:
df.loc[condition, 'col2'] = df.loc[condition, 'col2'].apply(func)
print(df, '\n')
col1 col2
0 69 a
1 77 barf;
2 88 barfoo
在编写问题时找到了解决方案:
df.loc[condition, 'col2'] = df.loc[condition, 'col2'].apply(func)
print(df, '\n')
col1 col2
0 69 a
1 77 barf;
2 88 barfoo
您还可以使用
df.loc[condition,“col2”]=df.loc[condition,“col2”].mask(df[“col2”].eq(“barf;”,“a”)
而无需定义函数。在实际项目中,我需要使用函数,因为有更复杂的操作(使用re.sub()-regex模式替换)。但在这种情况下,我认为你的解决方案更有效。非常感谢。您还可以使用df.loc[condition,“col2”]=df.loc[condition,“col2”].mask(df[“col2”].eq(“barf;”,“a”)
而无需定义函数。在实际项目中,我需要使用函数,因为有更复杂的操作(使用re.sub()-regex模式替换)。但在这种情况下,我认为你的解决方案更有效。非常感谢。