将整数列表添加到 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
不同的变量名。
我有一个如下所示的数据框:
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
不同的变量名。