我有一个由用户定义的列表的函数(函数f).比方说,它是列表元素的总和,但也可以是另一个函数.
然后我有一个包含两列的数据帧:包含数字列表的‘pred’和包含单个数字的‘Value’.值-1是需要更新的占位符.
import pandas as pd
def f(my_list):
return sum(my_list)
data = {'pred':[[],[1],[1],[1],[2],[2,3],[2,4],[3],[3,4],[4],[6,7,9,10]]}
df = pd.DataFrame(data)
df.index = df.index + 1
df.loc[5,'value'] = 1
df.loc[8,'value'] = 0
df.loc[10,'value'] = 2
df.loc[11,'value'] = 100
df.value = df.value.fillna(-1).astype(int) #placeholder, the values cannot be negative
print(df)
pred value
1 [] -1
2 [1] -1
3 [1] -1
4 [1] -1
5 [2] 1
6 [2, 3] -1
7 [2, 4] -1
8 [3] 0
9 [3, 4] -1
10 [4] 2
11 [6, 7, 9, 10] 100
现在,我必须以相反的顺序遍历df的行,并使用那些在他们的pred列表中有i的值列表的函数f更新值.保证i不会出现在pred列的列表中,第1行到第i行.
在本例中,我们应该有:
value in row 9: f([100]) = 100;
value in row 7: f([100]) = 100;
value in row 6: f([100]) = 100;
value in row 4: f([2, 100, 100]) = 202;
value in row 3: f([100, 0, 100]) = 200;
value in row 2: f([1, 100, 100]) = 201;
value in row 1: f([201, 200, 202]) = 603.
所以,我需要一些帮助,教你如何做一个循环来完成.
for i in range(len(df),0,-1):
if df.loc[i,'value'] == -1:
df.loc[i,'value'] = ???
如有任何建议,我们不胜感激.