将问题追加到函数内部列表中

时间:2019-03-08 02:01:25

标签: python list function append

我有下表,该表具有唯一的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

如何解决此问题?

3 个答案:

答案 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检测到其他一些错误。这是我看到的第一个不正确的东西。请根据他们的回答进行更详细的修改