创建列时使用 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_idxl3w_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 个输出而没有错误