在特定列上显示两个数据框的差异

时间:2019-07-02 13:49:22

标签: python pandas

给出以下两个数据框,如何创建第三个数据框,例如desired_output

对于df1或{{1}中列出的每个成本中心,应显示df2的成本中心金额与df1的成本中心金额之差}(那么df2的默认金额应为0)。

例如,df1中的第一个金额是这样计算的:100-(50 + 150)= -100。

请注意,成本中心和金额列在每个df中的命名都不同。

desired_output

3 个答案:

答案 0 :(得分:1)

您似乎希望每个数据帧groupby().sum(),然后发现不同之处:

common_index = sorted(list(set(df.cost_center.unique()).union(set(df2.cc))))

sum1 =  df.groupby('cost_center').amount.sum().reindex(common_index, fill_value=0) 
sum2 = df2.groupby('cc').a.sum().reindex(common_index, fill_value=0)

sum1-sum2

给予:

cost_center
1    -100
2     700
3     300
4     250
5    1050
6    -350
7   -1200
dtype: int64

答案 1 :(得分:0)

当然不是唯一的解决方案,而是使用groupby().sum()并合并数据帧,然后计算差异的选项:

df3 = (df.groupby('cost_center', as_index=False).sum()
         .merge(df2.groupby('cc', as_index=False).sum(),
                left_on='cost_center', right_on='cc', how='outer')
         .fillna(0))
df3['diff'] = df3['amount'] - df3['a']
df3

   cost_center  amount   cc       a    diff
0          1.0   100.0  1.0   200.0  -100.0
1          2.0   700.0  0.0     0.0   700.0
2          3.0   300.0  0.0     0.0   300.0
3          4.0   400.0  4.0   150.0   250.0
4          5.0  1300.0  5.0   250.0  1050.0
5          0.0     0.0  6.0   350.0  -350.0
6          0.0     0.0  7.0  1200.0 -1200.0

答案 2 :(得分:0)

考虑不同的方式

df2.columns=df.columns
pd.concat([df,df2.assign(amount=-df2.amount)]).groupby('cost_center').sum()
Out[234]: 
             amount
cost_center        
1              -100
2               700
3               300
4               250
5              1050
6              -350
7             -1200