Python 如何使用loc的多个条件更改数据帧中的值?
我想按如下方式更改数据帧行/列中的值: 在这个区间内,当它发现一个不同的值等于1时,它就应该把2放进去 例如: 初始df: 通缉令: 以下代码有效,但我无法更改该值: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
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