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

我有一个像下面这样的 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 不同的变量名。

相似文章

scala - 多个列表的组合 (Scala)

我正在尝试编写一个函数,该函数将多个列表作为输入并返回这些列表之间每个组合的字符串表示形式。样本输入:valintegers=List(1,2,3,4)valcharacters=List('a','...