我有2个如下的excel csv文件
df1 = {'Transaction_Name':['SC-001_Homepage', 'SC-002_Homepage', 'SC-001_Signinlink'], 'Count': [1, 1, 2]}
df1 = pd.DataFrame(df1, columns=df1.keys())
df2 = {'Transaction_Name':['SC-002_Homepage', 'SC-001_Signinlink', 'SC-002_Signinlink'], 'Count': [1, 2, 1]}
df2 = pd.DataFrame(df2, columns=df2.keys())
我想比较两个数据,我可以使用下面的方法...
df_compare = df1.merge(df2, on='Transaction_Name', suffixes=('_df1','_df2'))
df_compare[['Count_df1','Count_df2']] = df_compare[['Count_df1','Count_df2']].astype(float).astype(int)
print (df_compare)
但是在df1中,存在SC-001_Homepage,而在df2中则不存在。使用上面的代码,我没有得到SC-001_Homepage的结果。 df2中也有SC-002_Signinlink,在df1中不可用。结果中也缺少此值。有人可以帮助我如何将这些交易包括在结果中吗?
预期结果应该像...
Transaction_Name Count_df1 Count_df2
0 SC-001_Homepage 1 0
1 SC-002_Homepage 1 1
2 SC-001_Signinlink 2 2
3 SC-002_Signinlink 0 1
答案 0 :(得分:2)
使用:
df1.merge(df2,on=['Transaction_Name'],how='outer',suffixes=('_df1','_df2')).fillna(0)
Transaction_Name Count_df1 Count_df2
0 SC-001_Homepage 1.0 0.0
1 SC-002_Homepage 1.0 1.0
2 SC-001_Signinlink 2.0 2.0
3 SC-002_Signinlink 0.0 1.0
如果要将浮点数转换为int,请使用:
df_new[df_new.select_dtypes(['float']).columns]= df_new.select_dtypes(['float']).astype(int)