我的数据帧的一部分如下:
personId ActivityType Time Act_delay
1473237100 remote_work_4 57651.0 57651.0
1473237100 home_2 59185.0 59185.0
1473237100 remote_work_5 65849.0 65849.0
1473237100 home_1 NaN 0.0
并且我想检查在任何一行中;ActivityType";列等于";home_ 1";并且如果";时间";列是NaN,然后替换";Act_delay"列设置为10800。我有下面的代码";
for i, row in df.iterrows():
if row['ActivityType'] == "home_1":
if row['Time'] == np.object:
df.loc[i,'Act_delay'] = 10800.0
但它不起作用。结果和以前一样。我该怎么办?
不建议在数据帧中循环,相反,我们可以利用逐位&
来组合条件(检查变量mask
(,然后使用df.loc[]
进行布尔索引并选择所需的序列来分配值。
mask = df['ActivityType'].eq('home_1') & df['Time'].isna()
df.loc[mask, 'Act_delay'] = 10800
输出:
personId ActivityType Time Act_delay
0 1473237100 remote_work_4 57651.0 57651.0
1 1473237100 home_2 59185.0 59185.0
2 1473237100 remote_work_5 65849.0 65849.0
3 1473237100 home_1 NaN 10800.0