【发布时间】:2021-04-06 16:26:53
【问题描述】:
我很困惑为什么 DataFrame 作为默认函数参数不能像我预期的那样工作。这让我感到困惑,为什么我仍然必须在函数调用中指定它。
基本上,我创建了一个函数,用于根据键(如左连接)将数据帧合并到主数据帧(我将其设置为默认参数)
简化的数据框(只是同一个学生,不同学科的分数):
dfA = pd.DataFrame ({'student': ['A'],
'math_score': [50]})
dfB = pd.DataFrame({'student': ['A'],
'eng_score': [70]})
dfC = pd.DataFrame({'student': ['A'],
'sci_score': [80]})
函数(我想一一得到他的科目分数,把它们合并到一个主df)
def merge_selected(df_to_merge, main_df = dfA):
# LEFT JOIN to main_df
main_df = main_df.merge(right=df_to_merge, how='left', on=['student'])
return main_df
使用函数合并两次:
dfA = merge_selected(dfB)
dfA = merge_selected(dfC)
现在这是我不明白的。我在第二次合并中丢失了eng_score。不知何故,当我第二次将dfA 分配给merge_selected 时,它被删除了。
student math_score sci_score
0 A 50 80
但是如果我在函数调用中指定了main_df = dfA:
dfA = merge_selected(dfB, main_df = dfA)
dfA = merge_selected(dfC, main_df = dfA)
我不输eng_score并得到他所有的分数:
student math_score eng_score sci_score
0 A 50 70 80
基本上我已经解决了这个问题,但希望有人能对此有所了解。
为什么我仍然必须指定main_df,即使它应该默认为dfA?
另外,如果我不指定main_df = dfA,为什么会丢失eng_score?
【问题讨论】:
标签: python python-3.x pandas function dataframe