python - 如何根据多列从一个数据帧中减去另一个数据帧中的值?

标签 python pandas dataframe

我有两个 pandas 数据框。

import pandas as pd
data1 = {'id1': [625,625,725,625,725,1130,625,1130,725,1130], 
        'id2': ['AF','AG','AF','AP','AP','BM','BA','BC','BM','AF'],
        'Total': [75,68,33,77,42,25,113,80,72,36]}
df1 = pd.DataFrame(data1, columns = ['id1','id2','Total'])


data2 = {'id1': [625,725,625,625,1130,1130,625,725,1130,625], 
        'id2': ['AF','AF','AG','AP','AF','AG','BA','BA','BM','BM'],
        'Part1': [5,8,3,4,2,6,1,2,6,3]}

df2 = pd.DataFrame(data2, columns = ['id1','id2','Part1'])

我得到了这两个数据框。

df1     id1 id2  Total
0   625  AF     75
1   625  AG     68
2   725  AF     33
3   625  AP     77
4   725  AP     42
5  1130  BM     25
6   625  BA    113
7  1130  BC     80
8   725  BM     72
9  1130  AF     36
df2     id1 id2  Part1
0   625  AF      5
1   725  AF      8
2   625  AG      3
3   625  AP      4
4  1130  AF      2
5  1130  AG      6
6   625  BA      1
7   725  BA      2
8  1130  BM      6
9   625  BM      3

我想要的是创建第三个数据框,在其中保留 id1 和 id2 的每个唯一组合,同时从 df1 中的“总计”中减去 df2 中“Part1”列中的值,假设每个 id1 和 id2 组合只出现在任一数据帧中一次。

例如: “625”和“AF”的组合在 df1 中给出值 75,在 df2 中给出值 5。我想要的是创建第三个数据框,其中一行在三列中包含“625”、“AF”和“70”。

如果一个组合出现在 df1 中但没有出现在 df2 中,我们将其视为存在于 df2 中但值为 0,反之亦然。

不确定我的描述是否充分。

最佳答案

使用Series.sub使用 fill_value=0 参数进行减法,并将列 id1, id2 转换为 MultiIndex,因此减法基于这些列:

df = (df1.set_index(['id1','id2'])['Total']
         .sub(df2.set_index(['id1','id2'])['Part1'], fill_value=0)
         .reset_index(name='new'))
print (df)
     id1 id2    new
0    625  AF   70.0
1    625  AG   65.0
2    625  AP   73.0
3    625  BA  112.0
4    625  BM   -3.0
5    725  AF   25.0
6    725  AP   42.0
7    725  BA   -2.0
8    725  BM   72.0
9   1130  AF   34.0
10  1130  AG   -6.0
11  1130  BC   80.0
12  1130  BM   19.0

关于python - 如何根据多列从一个数据帧中减去另一个数据帧中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62275371/

相关文章:

python - 如何在 for 循环中识别多个列表项

python - 从多个系列创建 DataFrame

python - sklearn : TFIDF Transformer : How to get tf-idf values of given words in document

python - QGridLayout 小部件重叠

python-3.x - Pandas 错误: Passing lists with missing labels

python - 日期时间行为类型错误: parser() missing 1 required positional argument:

python - 将一列拆分为多列/清洗数据集

dataframe - 将组特定函数应用于 Julia 数据框

python - 并行 Python - 在并行执行中将对象创建到另一个类中

python - categorical_accuracy 值是什么意思? categorical_accuracy 100% 但数据显示错误预测