我有下表,该表具有唯一的ID,实际的和建模的输出。
Pass_ID Actual Modeled
0 100 1 1
1 101 0 1
2 102 1 0
3 103 1 1
我编写了以下函数,因此我可以生成一个列表,最终将其转换为数据框,以便可以轻松地为每个Pass_ID回调行,以查看是否可以隔离模型为何不适用于那些行。但是,该列表一直保持空白。
new_list = []
def isolate_diff(df):
if df['Modeled'].any() != df['Actual'].any():
new_list.appened(df['Pass_ID'])
else:
pass
return new_list
如何解决此问题?
答案 0 :(得分:1)
我同意@Prune,但是要解决这个问题,我认为您需要一个完全不同的解决方案:
print(df[df['Modeled']!=df['Actual']])
输出:
Pass_ID Actual Modeled
1 101 0 1
2 102 1 0
如果要列出Pass_ID
:
print(df.loc[df['Modeled']!=df['Actual'],'Pass_ID'].tolist())
输出:
[101, 102]
答案 1 :(得分:0)
您编写了一个全局条件,而不是向量化条件:
if df['Modeled'].any() != df['Actual'].any():
如果任何元素为True
,则每个术语为1
。这样可以快速评估
if True != True
这会给您一个空的new_list
。
相反,编写一个捕获df['Pass_ID']
,已过滤的表达式,其中df['Modeled'] != df['Actual']
。你可以从那里拿走吗?
答案 2 :(得分:0)
将new_list.appened(df['Pass_ID'])
更改为new_list.append(df['Pass_ID'])
编辑:Prune和U9检测到其他一些错误。这是我看到的第一个不正确的东西。请根据他们的回答进行更详细的修改