如何解决如何比较两个不同数据框的两列并添加新的结果列
我有两个数据框
第一个 DF1:( 7 x 3)
ID | 项目 | 数量 |
---|---|---|
123 | qwe | 1 |
123 | asd | 4 |
123 | zxc | 7 |
234 | ewr | 2 |
234 | sdf | 5 |
345 | xcv | 8 |
345 | qwe | 3 |
第二个 DF2:( 6 x 3)
ID | 项目 | 数量 |
---|---|---|
123 | asd | 3 |
123 | qwe | 6 |
234 | ewr | 9 |
234 | sdf | 2 |
345 | qwe | 5 |
345 | xcv | 8 |
我想比较 DF1 和 DF2 的 123 个 ID,并在该 ID 中比较 DF1 和 DF2 的项目数量并获得一个新列。 对其他 ID 重复相同的操作
新列在哪里
DF1['Qty_new']= DF1['Qty'] - DF2['Qty']
需要的结果:(7 x 3)
ID | 项目 | 数量 |
---|---|---|
123 | qwe | -5 |
123 | asd | 1 |
123 | zxc | 7 |
234 | ewr | -7 |
234 | sdf | 3 |
345 | xcv | 0 |
345 | qwe | -2 |
我试过使用
if (DF1['ID'] == DF2['ID']):
while (DF1['Item'] == DF2['Item']):
DF1['Qty_new']= DF1['Qty'] - DF2['Qty']
出现错误:ValueError: Can only compare identically-labeled Series objects
也试过了
while (DF1['ID'] == DF2['ID']) & (DF1['Item'] == DF2['Item']):
DF1['Qty_new']= DF1['Qty'] - DF2['Qty']
错误TypeError: unsupported operand type(s) for &: 'str' and 'str'
请提出建议。
解决方法
在这里,合并 id 和 item:
defaults = {None: None,'': None}
def func(arg):
"""Some function that cannot be called with None"""
if arg is None:
raise ValueError()
print(f'func called with {arg}')
def foo(a):
return defaults.get(a,True) and func(a)
def foo_b(a):
defaults_b = {'bar': 0,**defaults}
return defaults_b.get(a,True) and func(a)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。