最近我问了类似的问题,但是错误消息和问题有所改变。
我想根据每个列表中项目的位置创建多个依赖于上一个列表的列表
例如,列表1将读取特定文件,并根据比较结果返回数字或布尔值false。
然后,第二个列表将比较与前一个列表中相同位置处出现的数字(如果前一个列表中的值不是false),并根据与第一个列表相同的比较返回值或false
数据帧示例:
a = pd.DataFrame([0,0.9,0.6,0.7,0.8])
b = pd.DataFrame([0.7,0.51,0.3,0.7,0.2])
我创建了执行这些比较并创建列表的函数
def generic_state_machine(file,obs_nums):
return file.ix[:,0][obs_nums] if file.ix[:,0][obs_nums] > 0.2 else False
在这种情况下,obs_nums表示项目在列表中的位置
然后我创建了查看不同文件的列表
session_to_leads = []
lead_to_opps = []
for i in range(1,len(a)):
session_to_leads.append(generic_state_machine(file=a,obs_nums=i))
lead_to_opps.append(generic_state_machine(file=b,obs_nums=i)) if session_to_leads != False else lead_to_opps.append(False)
我设法解决了遇到的初始错误,现在唯一的问题是,lead_to_opps列表不依赖于session_to_leads,因此,如果位置1中有False值,lead_to_opps不会在同一位置自动返回False。因此,假设random.uniform(0,1)始终生成0.5,这就是我当前的结果:
session_to_leads = [False,0.9,0.6,0.7,0.8]
lead_to_opps = [0.7,0.51,False,0.7,False]
这是我想要的结果:
session_to_leads = [False,0.9,0.6,0.7,0.8]
lead_to_opps = [False,0.51,False,0.7,False]
答案 0 :(得分:0)
我可能不理解您的要求,您的意图也不清楚。您已经从列表创建了数据框。您只需要直接在数据框a
和b
上工作。这里的方法适用于数据帧a
和b
m = a > 0.2
session_to_leads = a.where(a > 0.2, False)[0].to_list()
Out[755]: [False, 0.9, 0.6, 0.7, 0.8]
在拥有session_to_leads
之后,对b
使用相同的条件并结合条件m
lead_to_opps = b.where((b > 0.2) & m, False)[0].to_list()
Out[769]: [False, 0.51, 0.3, 0.7, False]
注意:lead_to_opps
的第三个元素是0.3
,而不是您期望的输出中的False
,因为条件是> 0.2
和{ True
中的{1}}