2016-11-17 85 views
2

我试图创建一个函数,可以在不更改原始数据框的情况下更改数据框副本的值。这是我到目前为止有:在不改变原始数据框的情况下创建数据框副本

def home_undervalued(df): 
    local_df = df 
    local_df['total_games'] = 0 
    local_df['total_wins'] = 0 
    cond_1 = local_df['predicted_spread'] > local_df['vegas_spread'] 
    cond_2 = local_df['actual_spread'] > local_df['vegas_spread'] 
    cond_3 = local_df['predicted_spread'] - local_df['vegas_spread'] >= 3 

    local_df.loc[cond_1 & cond_3 , 'total_games'] = 1 
    local_df.loc[cond_1 & cond_2 & cond_3 , 'total_wins'] = 1 

    total_games = sum(local_df.total_games) 
    total_wins = sum(local_df.total_wins) 

    return float(total_wins)/float(total_games) 

我然后调用函数

home_undervalued(df) 

看来工作,但后来我意识到了DF值[“total_games”]和df [” total_wins']已经改变。我试图改变local_df的值,但保留值df。有想法该怎么解决这个吗?

回答

2

local_df = df只是创建了一个参考df名为local_df。如果你想创建一个完整的其他数据框(顺便说一下,我不建议),你可以创建一个新的数据框,如df.copy(deep=True)

+0

你会推荐什么,而不是制作新的副本?添加更多列? – user3294779

+0

我会研究为什么你认为你需要一个副本,尽管你可能需要一个副本,但可能会有更高性能的解决方案。添加更多列或替换不需要的现有列是一个好主意。 –

+0

这很有道理。谢谢。 – user3294779

2

只需使用的DataFrame

local_df = df.copy(deep=True) 

copy方法在这一行以后在local_df将存储的df副本。

相关问题