通过索引修改numpy ndarray



我一直在尝试向数字列添加值。

import pandas as pd
def twod_array(num):
data = {"group": [-1, 0, 1, 2],
'numbers': [[2], [14, 15], [16, 17], [19, 20, 21]],
}
df = pd.DataFrame(data=data)
print(df)
return 0

目前它打印的是:

group       numbers
0     -1           [2]
1      0      [14, 15]
2      1      [16, 17]
3      2  [19, 20, 21]

我想做的是根据传递的输入添加一个值,例如,如果我将14.5作为num传递,这就是我希望看到的输出:

group       numbers
0     -1           [2]
1      0      [14,14.5 15]
2      1      [16, 17]
3      2  [19, 20, 21]

我希望有人能帮上忙。这是我到目前为止所拥有的,但它在插入行失败,错误为"0";numpy.ndarray";对象没有属性"insert"。

df = pd.DataFrame({"group": [-1, 0, 1, 2],
'numbers': [[2], [14, 15], [16, 17], [19, 20, 21]],
})
arr = df['numbers'].to_list()
num = 14.5
for i, sub_arr in enumerate(arr):
for j, n in enumerate(sub_arr):
if arr[i][j]>num:
if j!=0: 
arr[i].insert(j,num)
else: arr[i-1].insert(-1 ,num)
df['numbers'] = arr
num = 14.5
mask = (df.numbers.apply(min).lt(num) &
df.numbers.apply(max).gt(num))
index = mask[mask].index[0]
df.numbers.at[index].append(num)
df.numbers.at[index].sort()
print(df)
# Output:
group         numbers
0     -1             [2]
1      0  [14, 14.5, 15]
2      1        [16, 17]
3      2    [19, 20, 21]

遍历df,查看num是否位于numbers列的第一个值和最后一个值之间。如果是,请使用bisect模块以排序的方式插入num

import bisect
for i in range(len(df)):
if num >= df.loc[i,'numbers'][0] and num<= df.loc[i,'numbers'][-1]:
bisect.insort(df.loc[i,'numbers'],num)

print(df)
group         numbers
0     -1             [2]
1      0  [14, 14.5, 15]
2      1        [16, 17]
3      2    [19, 20, 21]

最新更新