python - 如何减去具有重复第一列的两个数据框?
问题描述
所以,我有以下两个数据框,我的理想输出是让 open_orders 减少 cancel_orders,所以我知道我有多少 open_orders。
期望的输出:
df_total_orders
order_id business_symbol open_orders
0 a1b2c3111111 AA 0.0
1 4kl3l2242244 AAA 0.0
2 21312a224144 BBB 0.0
3 124f32rv2323 CCC 0.0
4 2412dfe21edf DDD 0.0
5555
我现在拥有的:
df_add_orders (this dataframe contains duplicates in the order id column)
order_id business_symbol open_orders
0 a1b2c3111111 AA 100.0
1 4kl3l2242244 AAA 1000.0
2 21312a224144 BBB 1000.0
3 124f32rv2323 CCC 1000.0
4 2412dfe21edf DDD 1000.0
10000
df_cancel_orders (this dataframe contains duplicates in the order id column)
order_id cancel_orders
0 a1b2c3111111 100.0
1 4kl3l2242244 1000.0
2 21312a224144 1000.0
3 124f32rv2323 1000.0
4 2412dfe21edf 1000.0
4000
我正在使用以下 group by 来获取未结订单总数,但它会在输出中删除我的符号。
df_add_orders_group = df_add_orders.groupby(['order_id'], as_index=False)['open_orders'].sum()
df_add_orders_group
order_id open_orders
0 a1b2c3111111 110.0
1 4kl3l2242244 1200.0
2 21312a224144 1500.0
3 124f32rv2323 1500.0
4 2412dfe21edf 1500.0
5000
然后我减去已关闭的订单
df_cancel_orders_group = df_cancel_orders.groupby(['order_id'], as_index=False)['cancel_orders'].sum()
但我想保留这些符号,这样我就可以比较总的未结订单,我需要一些方法将减法的结果与主要的 df_add_orders 合并,并清理 order_id 以总结重复项。
解决方案
df_total_orders =df_add_orders.merge(df_cancel_orders,
how = 'left',
on = 'order_id)
将为您提供一个包含来自两个原始数据帧的数据的数据帧。然后你可以做
df_total_orders['open_orders'] =
df_total_orders['open_orders']-
df_total_orders['cancel_orders']
然后删除该cancel_order
列。
另一种策略是将两个原始数据帧附加在一起。然后,您可以对 id 和 sum 进行 groupby。这将创建一个数据框,对于每个 ID,一列是该 ID 所有未结订单的总和,另一列是该 ID 所有取消订单的总和。然后,您可以获取两列之间的差异。
当你附加两个数据框时,你会得到一堆空值;来自未结订单的部分将在取消订单列中为空,反之亦然。我认为对 groupby 求和只会将空值视为零,但您可能需要明确告诉它这样做。
推荐阅读
- php - Wordpress WPBakery 禁用 prettyPhoto 并使用响应式灯箱和图库
- dart - 将 http 响应转换为 Flutter 列表
- elasticsearch - 使用 elasticsearch 搜索准确的词条位置
- android - 错误无法在 Proguard Enabled 版本中实例化服务 com.google.firebase.iid.FirebaseInstanceIdService: java.lang.ClassNotFoundException-
- ios - MPCPlayerRequestErrorDomain Code=1000 "发送命令 0 失败"
- java - 正则表达式过滤跨度标签,如果它具有属性
- javascript - 进度条仅在第一次以角度 6 连续上传文件时显示
- css - 如何将饱和的 CSS 过滤器应用于 SVG 元素?
- java - 将 mp3 文件中的字节表示为十六进制字符串
- excel - MS Excel If 语句不适用于班次公式?