如果其他col具有相同的值,则减去两个df col

时间:2019-06-23 11:58:51

标签: python pandas

我是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对象是否会对性能产生影响?这是标签上的列类型。

1 个答案:

答案 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