Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 显示特定列上两个数据帧的差异_Python_Pandas - Fatal编程技术网

Python 显示特定列上两个数据帧的差异

Python 显示特定列上两个数据帧的差异,python,pandas,Python,Pandas,给定如下两个数据帧,如何创建第三个数据帧,如所需的\u输出 对于df1或df2中列出的每个成本中心,df1中的成本中心金额与df2中的成本中心金额之间的差异(此时df1的默认金额应为0) 因此,例如,期望的_输出中的第一个量是这样计算的:100-(50+150)=-100 还请注意,成本中心和金额列在每个df中的名称不同 import pandas as pd d = { 'cost_center': [1, 2, 3, 4, 5, 2, 5, 5], 'amount': [1

给定如下两个数据帧,如何创建第三个数据帧,如
所需的\u输出

对于
df1
df2
中列出的每个成本中心,
df1
中的成本中心金额与
df2
中的成本中心金额之间的差异(此时
df1
的默认金额应为0)

因此,例如,
期望的_输出中的第一个量是这样计算的:100-(50+150)=-100

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

import pandas as pd

d = {
    'cost_center': [1, 2, 3, 4, 5, 2, 5, 5],
    'amount': [100, 200, 300, 400, 500, 500, 500, 300],
}

d2 = {
    'cc': [1, 4, 5, 6, 7, 1, 7],
    'a': [50, 150, 250, 350, 450, 150, 750],
}

desired_output = {
    'cost_center': [1, 2, 3, 4, 5, 6, 7],
    'df_amount_minus_df2_amount': [-100, 700, 300, 250, 1050, -350, -1200],
}

df = pd.DataFrame(d)
df2 = pd.DataFrame(d2)

看起来您需要每个数据帧的
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

当然不是唯一的解决方案,而是使用
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

思考不同的方式

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

您是如何获得预期的产出的?你能解释一下成本中心1的例子吗?看看熊猫加入/合并特定列上的数据帧:@Erfan:对不起,对于CC 1,它应该是“-100”:100-(50+150)。在你的问题中添加逻辑。。