我一直在尝试向数字列添加值。
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]