我想在df中的所有蒙版值m上用'ass'替换'bee'。

import pandas as pd

data = {'Data1':[899, 900, 901, 902],
        'Data2':['as-bee', 'be-bee', 'bee-be', 'bee-as']}

df = pd.DataFrame(data)

   Data1   Data2
0    899  as-bee
1    900  be-bee
2    901  bee-be
3    902  bee-as

wrong = {'Data1':[900,901]}

df1 = pd.DataFrame(wrong)

   Data1
0    900
1    901

m = df['Data1'].isin(wrong['Data1'])

df[m]['Data2'].apply(lambda x: x.replace('bee','aas'))

1    be-aas
2    aas-be
Name: Data2, dtype: object

它返回所需的更改,但df中的值不会更改。做df[m]['Data2']=df[m]['Data2'].apply(lambda x: x.replace('bee','aas'))也没有帮助,因为它返回错误。

分析解答

IIUC,你可以这样做

方法1df.loc[]

m=df.Data1.isin(df1.Data1) # boolean mask
df.loc[m,'Data2']=df.loc[m,'Data2'].replace('bee','ass',regex=True)
print(df)

方法2: np.where()

m=df.Data1.isin(df1.Data1)
df.Data2=np.where(m,df.Data2.replace('bee','ass',regex=True),df.Data2)
print(df)

   Data1   Data2
0    899  as-bee
1    900  be-ass
2    901  ass-be
3    902  bee-as