我是python和pandas的新手。 在两个不同的df列之间寻求减法帮助 样本数据
df1 = pd.DataFrame({'label1': ['lab1', 'lab2', 'lab3', 'lab4'],
'compare1': [10, 20, 30, 40],
'col3': [100, 50, -30, -50]})
df2 = pd.DataFrame({'lable1': ['lab1', 'lab2', 'lab4', 'lab5'],
'compare1': [80,10, 40, 50],
'col3': [200, 60, 30, 50]})
df_diff = pd.DataFrame({'label': ['lab1', 'lab2', 'lab4', 'lab3', 'lab5'],
'df1_compare1': [10, 20, 40, 30, 0],
'df2_compare1': [80,10, 40, 0, 50],
'compare': [-70, 10, 0, 30, 50]})
两个df的列名和计数相同。
如果label1和label2具有相同的值,则需要帮助df1.compare1和df2.compare2之间的减法(或其他数学运算)。
例如,lab1,lab2和lab 4(尽管lab 4在不同的行上)具有相同的标签值。在两个df中不相同的任何行应以原始值显示在df的底部,而其他列数据显示为0。
实际数据的大小为CSV / excel MB,如果可能,寻找有效的方法
非null对象是否会对性能产生影响?这是标签上的列类型。
答案 0 :(得分:1)
首先merge
将您的数据框放在列label
上。
最后减去compare
,创建您的compare1-compare2
列:
df_diff = df1[['label1', 'compare1']].merge(df2[['label1', 'compare1']],
on='label1',
how='outer',
suffixes=['_df1', '_df2'])
df_diff['compare'] = df_diff['compare1_df1'].fillna(0) - df_diff['compare1_df2'].fillna(0)
label1 compare1_df1 compare1_df2 compare
0 lab1 10.0 80.0 -70.0
1 lab2 20.0 10.0 10.0
2 lab3 30.0 NaN 30.0
3 lab4 40.0 40.0 0.0
4 lab5 NaN 50.0 -50.0
如果您有20分钟的时间,那么可以很好地了解merging
的工作原理:Pandas Merging 101