Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据此带掩码的数据帧中其他列中的特定值,更改数据帧中一列中的值(使用apply)_Python_Pandas_Dataframe_Pandas Apply - Fatal编程技术网

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模式替换)。但在这种情况下,我认为你的解决方案更有效。非常感谢。