我试图从 DataFrame B 中的一列值中减去 DataFrame A 中一列的值,但前提是多个列值彼此相等。
假设(虚构):
DataFrame A:
Index Department Speciality TargetMonth Capacity
1 Sales Cars 2019-1 150
2 Sales Cars 2019-2 120
3 Sales Furniture 2019-1 110
4 IT Servers 2019-1 100
DataFrame B:
Index Department Speciality TargetMonth Required
1 Sales Cars 2019-1 100
2 Sales Cars 2019-2 120
3 IT Servers 2019-1 50
4 Sales Furniture 2019-1 50
我故意调换了 DataFrame B 和 A 中索引 3 和 4 的顺序。我的目标是从 DataFrame A 的 Capacity 列中减去 DataFrame B 的 Required 列作为所需的容量小时数,并得到另一个不一定需要排序的列表:
Index Department Speciality TargetMonth Result
1 Sales Cars 2019-1 50
2 Sales Cars 2019-2 0
3 Sales Furniture 2019-1 60
4 IT Servers 2019-1 50
因此,从技术上讲,仅减去,并且仅当所有列值彼此匹配且不基于顺序时,因为一个列表或另一个列表中可能缺少某些行。
我可以用一些 for 循环和条件来解决这个问题,但我想有一个干净整洁的 Pandas 方法可以用 .subtract 解决这个问题,尽管它是我目前卡住的“连接”部分。
提前感谢您抽出时间。
请您参考如下方法:
这就是 Index 如此有用的原因,减法将在索引(行和列)上对齐。
dfA = dfA.set_index(['Department', 'Speciality', 'TargetMonth'])
dfB = dfB.set_index(['Department', 'Speciality', 'TargetMonth'])
dfA.sub(dfB.rename(columns={'Required': 'Capacity'}), fill_value=0)
Capacity
Department Speciality TargetMonth
IT Servers 2019-1 50
Sales Cars 2019-1 50
2019-2 0
Furniture 2019-1 60
