我有一个像下面这样的 dataframe :
active idx
0 nan 0
1 20.0 0
2 32.0 0
3 nan 1
4 38.0 1
5 24.0 1
6 nan 2
7 33.0 2
8 44.0 2
9 59.0 2
10 nan 3
11 17.0 3
12 15.0 3
13 9.0 3
我也有一个这样的系列:
idx
0 3
1 3
2 4
3 4
Name: active, dtype: int64
我也有一个这样的列表:
list = [[4.0, 4.0], [2.0, 3.0], [1.0, 0.0, 1.0], [0.0, 0.0, -1.0]]
我需要广播列表元素,其位置对应于数据帧中 values 的第 n+1 个数字中的第一个数据帧中的 idx,因此我们忽略每个新 idx 开头显示的 np.nan。
所以对于 idx = 0,我在第二个系列中进行查找,并查看前 2 个 values 我需要在 nan 之后广播第一个元素,即 [4.0, 4.0] 的 values,所以不应该是数字添加到 np.nan
所以它应该是这样的:
active idx
0 nan 0
1 24.0 0
2 36.0 0
3 nan 1
4 40.0 1
5 27.0 1
6 nan 2
7 34.0 2
8 44.0 2
9 60.0 2
10 nan 3
11 17.0 3
12 15.0 3
13 8.0 3
我知道我可以循环,但这不是最优化的方式,我已经厌倦了分组和应用函数,但我正在努力将列表广播到 values。
回答1
由于您的列表已经按正确的顺序排列,您可以从 dataframe 中过滤掉 nan
values 并对其进行操作。您可以使用 numpy.concatenate
来展平列表。假设你的 dataframe 被命名为 df
:
df.active[~df.active.isna()] += np.concatenate(list)
还建议在 python 中使用与 list
不同的变量名。