将整数列表添加到 DataFrame 的不同切片

Adding a list of integer to different slices of a 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]]

我需要从数据框中的第 n+1 个值中广播位置对应于第一个数据框中的 idx 的列表元素,因此我们忽略开头显示的 np.nan每一个新的 idx。

所以对于 idx = 0,我在第二个系列中进行查找并查看前两个值我需要广播第一个元素 [4.0, 4.0] 之后的值,所以没有数字应该被添加到 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

我知道我可以循环,但这不是最优化的方式,我已经厌倦了分组和应用函数,但我正在努力将列表广播到值。

由于您的列表已经按正确顺序排列,您可以从数据框中过滤掉 nan 值并对其进行操作。您可以使用 numpy.concatenate 来展平列表。假设您的数据框名为 df:

df.active[~df.active.isna()] += np.concatenate(list)

还建议在 python 中使用与 list 不同的变量名。