创建列时使用 loc by np.where 仍然会出现 keyerror?
still get keyerror using loc by np.where when creating columns?
df_w
date ts_code low l3w_highest_idx
0 2021/5/9 300671.SZ 49 NaN
1 2021/5/9 603026.SH 76.96 NaN
2 2021/5/16 300671.SZ 47.79 1
3 2021/5/16 603026.SH 70.04 2
4 2021/5/23 300671.SZ 63.23 3
5 2021/5/23 603026.SH 75.99 3
6 2021/5/30 300671.SZ 49.75 5
7 2021/5/30 603026.SH 84.18 6
8 2021/6/6 300671.SZ 53.05 7
9 2021/6/6 603026.SH 89.82 8
10 2021/6/13 300671.SZ 66.7 9
11 2021/6/13 603026.SH 98.8 9
12 2021/6/20 300671.SZ 66.67 NaN
13 2021/6/20 603026.SH 106.33 NaN
14 2021/6/27 300671.SZ 70.91 12
15 2021/6/27 603026.SH 119.22 14
16 2021/7/4 300671.SZ 85.6 15
17 2021/7/4 603026.SH 136.03 16
18 2021/7/11 300671.SZ 127.96 16
19 2021/7/11 603026.SH 164.77 18
20 2021/7/18 300671.SZ 133.12 19
21 2021/7/18 603026.SH 201.2 20
22 2021/7/25 300671.SZ 136.44 21
23 2021/7/25 603026.SH 202.98 22
我想创建基于 l3w_higest_idx
的 l3w_higest_low
列,如下所示,但出现键盘错误。
df_w=df_w.assign(
l3w_highest_idx_low=\
lambda x: np.where(x.l3w_highest_idx.isin(x.index), x.loc[x.l3w_highest_idx]['low'] , np.nan)
)
KeyError: '[nan] not in index'
我不知道为什么使用 np.where
但仍然出错。希望修复。
你可以用 reindex
做 assign
df=df.assign(
l3w_highest_idx_low= df['low'].reindex(df.l3w_highest_idx).values
)
df
date ts_code low l3w_highest_idx l3w_highest_idx_low
0 2021/5/9 300671.SZ 49.00 NaN NaN
1 2021/5/9 603026.SH 76.96 NaN NaN
2 2021/5/16 300671.SZ 47.79 1.0 76.96
3 2021/5/16 603026.SH 70.04 2.0 47.79
4 2021/5/23 300671.SZ 63.23 3.0 70.04
5 2021/5/23 603026.SH 75.99 3.0 70.04
6 2021/5/30 300671.SZ 49.75 5.0 75.99
7 2021/5/30 603026.SH 84.18 6.0 49.75
8 2021/6/6 300671.SZ 53.05 7.0 84.18
9 2021/6/6 603026.SH 89.82 8.0 53.05
10 2021/6/13 300671.SZ 66.70 9.0 89.82
11 2021/6/13 603026.SH 98.80 9.0 89.82
12 2021/6/20 300671.SZ 66.67 NaN NaN
13 2021/6/20 603026.SH 106.33 NaN NaN
14 2021/6/27 300671.SZ 70.91 12.0 66.67
15 2021/6/27 603026.SH 119.22 14.0 70.91
16 2021/7/4 300671.SZ 85.60 15.0 119.22
17 2021/7/4 603026.SH 136.03 16.0 85.60
18 2021/7/11 300671.SZ 127.96 16.0 85.60
19 2021/7/11 603026.SH 164.77 18.0 127.96
20 2021/7/18 300671.SZ 133.12 19.0 164.77
21 2021/7/18 603026.SH 201.20 20.0 133.12
22 2021/7/25 300671.SZ 136.44 21.0 201.20
23 2021/7/25 603026.SH 202.98 22.0 136.44
在您的代码中,第一个 loc
未包含在索引中时无法获取 index
,在您的情况下 NaN
不包含在 index
中,第二你已经尝试通过使用 np.where
来避免它,但是,np.where 需要输入两个不同的数组,必须创建 1 个输出而没有错误
df_w
date ts_code low l3w_highest_idx
0 2021/5/9 300671.SZ 49 NaN
1 2021/5/9 603026.SH 76.96 NaN
2 2021/5/16 300671.SZ 47.79 1
3 2021/5/16 603026.SH 70.04 2
4 2021/5/23 300671.SZ 63.23 3
5 2021/5/23 603026.SH 75.99 3
6 2021/5/30 300671.SZ 49.75 5
7 2021/5/30 603026.SH 84.18 6
8 2021/6/6 300671.SZ 53.05 7
9 2021/6/6 603026.SH 89.82 8
10 2021/6/13 300671.SZ 66.7 9
11 2021/6/13 603026.SH 98.8 9
12 2021/6/20 300671.SZ 66.67 NaN
13 2021/6/20 603026.SH 106.33 NaN
14 2021/6/27 300671.SZ 70.91 12
15 2021/6/27 603026.SH 119.22 14
16 2021/7/4 300671.SZ 85.6 15
17 2021/7/4 603026.SH 136.03 16
18 2021/7/11 300671.SZ 127.96 16
19 2021/7/11 603026.SH 164.77 18
20 2021/7/18 300671.SZ 133.12 19
21 2021/7/18 603026.SH 201.2 20
22 2021/7/25 300671.SZ 136.44 21
23 2021/7/25 603026.SH 202.98 22
我想创建基于 l3w_higest_idx
的 l3w_higest_low
列,如下所示,但出现键盘错误。
df_w=df_w.assign(
l3w_highest_idx_low=\
lambda x: np.where(x.l3w_highest_idx.isin(x.index), x.loc[x.l3w_highest_idx]['low'] , np.nan)
)
KeyError: '[nan] not in index'
我不知道为什么使用 np.where
但仍然出错。希望修复。
你可以用 reindex
assign
df=df.assign(
l3w_highest_idx_low= df['low'].reindex(df.l3w_highest_idx).values
)
df
date ts_code low l3w_highest_idx l3w_highest_idx_low
0 2021/5/9 300671.SZ 49.00 NaN NaN
1 2021/5/9 603026.SH 76.96 NaN NaN
2 2021/5/16 300671.SZ 47.79 1.0 76.96
3 2021/5/16 603026.SH 70.04 2.0 47.79
4 2021/5/23 300671.SZ 63.23 3.0 70.04
5 2021/5/23 603026.SH 75.99 3.0 70.04
6 2021/5/30 300671.SZ 49.75 5.0 75.99
7 2021/5/30 603026.SH 84.18 6.0 49.75
8 2021/6/6 300671.SZ 53.05 7.0 84.18
9 2021/6/6 603026.SH 89.82 8.0 53.05
10 2021/6/13 300671.SZ 66.70 9.0 89.82
11 2021/6/13 603026.SH 98.80 9.0 89.82
12 2021/6/20 300671.SZ 66.67 NaN NaN
13 2021/6/20 603026.SH 106.33 NaN NaN
14 2021/6/27 300671.SZ 70.91 12.0 66.67
15 2021/6/27 603026.SH 119.22 14.0 70.91
16 2021/7/4 300671.SZ 85.60 15.0 119.22
17 2021/7/4 603026.SH 136.03 16.0 85.60
18 2021/7/11 300671.SZ 127.96 16.0 85.60
19 2021/7/11 603026.SH 164.77 18.0 127.96
20 2021/7/18 300671.SZ 133.12 19.0 164.77
21 2021/7/18 603026.SH 201.20 20.0 133.12
22 2021/7/25 300671.SZ 136.44 21.0 201.20
23 2021/7/25 603026.SH 202.98 22.0 136.44
在您的代码中,第一个 loc
未包含在索引中时无法获取 index
,在您的情况下 NaN
不包含在 index
中,第二你已经尝试通过使用 np.where
来避免它,但是,np.where 需要输入两个不同的数组,必须创建 1 个输出而没有错误