Python 如何使用loc的多个条件更改数据帧中的值?

Python 如何使用loc的多个条件更改数据帧中的值?,python,pandas,dataframe,time-series,assign,Python,Pandas,Dataframe,Time Series,Assign,我想按如下方式更改数据帧行/列中的值: 在这个区间内,当它发现一个不同的值等于1时,它就应该把2放进去 例如: 初始df: 通缉令: 以下代码有效,但我无法更改该值: mask = (df.index > start_dates) & (df.index <= end_dates) for k in range (0, len(df.loc[mask])): if df.loc[mask].event[k] == 1: df.loc[mask].lo

我想按如下方式更改数据帧行/列中的值:

在这个区间内,当它发现一个不同的值等于1时,它就应该把2放进去

例如:

初始df:

通缉令:

以下代码有效,但我无法更改该值:

mask = (df.index > start_dates) & (df.index <= end_dates)

for k in range (0, len(df.loc[mask])):
    if df.loc[mask].event[k] == 1:
        df.loc[mask].loc[df.loc[mask].event == 1, "event"] = 2
但以上这些都不管用


请帮帮我非常感谢您的帮助

也许你想试试这个: 假设您有这样一个数据帧:

当val为1时,您需要增加val值。然后你只需做:

df.loc[df['val'] == 1, 'val'] = 2

最后您尝试的三行是pandas所称的链式loc调用,如果您想使用它们来分配新值,每次都会失败。一个。loc足够满足你的需求

df.loc[mask] = 2
 # or
df.loc[mask, :] = 2
# both will assign two to all columns if you have more

# or also
df.loc[mask, 'event'] = 2
不需要循环,.loc将使用布尔掩码选择所需的行

编辑

您可以将第三个条件包括到遮罩中

mask = (df.index > start_dates) & (df.index <= end_dates) & (df.event ==1)

我尝试了这些,但是他们在整个列上都加上了值2,我只想在值为1的地方加上它。在这种情况下应该如何修改?
df = pd.DataFrame(data={"index":[1,2,3,4], "val":[0,0,1,0],"event":[0,0,0,0]})
df.loc[df['val'] == 1, 'val'] = 2
df.loc[mask] = 2
 # or
df.loc[mask, :] = 2
# both will assign two to all columns if you have more

# or also
df.loc[mask, 'event'] = 2
mask = (df.index > start_dates) & (df.index <= end_dates) & (df.event ==1)
df.loc[mask & (df.event ==1), 'event'] = 2