根据另一个数据框的匹配列删除随机的行数

西蒙

我有两个数据框;订单退货

订单:

Index | OrderID |TransactionID | ProductID | BuyerID |     Date    | TotalOrder | ProductPrice
-----------------------------------------------------------------------------------------------
  0   |    A    |      A-1     |     05    |    1    |  dd-mm-yyy  |     140    |     50
  1   |    A    |      A-2     |     45    |    1    |  dd-mm-yyy  |     140    |     90
  2   |    B    |      B-1     |     33    |    1    |  dd-mm-yyy  |     15     |     10
  3   |    B    |      B-2     |     01    |    1    |  dd-mm-yyy  |     15     |     5
  4   |    C    |      C-1     |     45    |    1    |  dd-mm-yyy  |     90     |     90
  5   |    D    |      D-1     |     45    |    1    |  dd-mm-yyy  |     90     |     90
  6   |    E    |      E-1     |     45    |    1    |  dd-mm-yyy  |     90     |     90
  7   |    F    |      F-1     |     45    |    2    |  dd-mm-yyy  |     90     |     90

返回值:

ProductID | BuyerID | ProductPrice | Amount
------------------------------------------------------------------------------------------------
   33     |    1    |     10      |   1
   45     |    1    |     90      |   2
   01     |    1    |     5       |   1
 

对于退货中的每一行,订单中具有匹配的ProductID,BuyerID和ProductPrice的行应删除n= returns['Amount'])次。因此,我将仅获得索引为0、7以及1、4、5或6中的两个的行。

Index | OrderID |TransactionID | ProductID | BuyerID |     Date    | TotalOrder | ProductPrice
------------------------------------------------------------------------------------------------
  0   |    A    |      A-1     |     05    |    1    |  dd-mm-yyy  |     140    |     50
  7   |    F    |      F-1     |     45    |    2    |  dd-mm-yyy  |     90     |     90
 -----------------------------------------------------------------------------------------
 | 1  |    A    |      A-2     |     45    |    1    |  dd-mm-yyy  |     140    |     90 |
 | 4  |    C    |      C-1     |     45    |    1    |  dd-mm-yyy  |     90     |     90 |+ 2 out 
 | 5  |    D    |      D-1     |     45    |    1    |  dd-mm-yyy  |     90     |     90 |of these
 | 6  |    E    |      E-1     |     45    |    1    |  dd-mm-yyy  |     90     |     90 |
 -----------------------------------------------------------------------------------------

有什么办法可以做到吗?

系列休闲

这应该工作:

import pandas as pd

orders = pd.DataFrame(
    {
        'orderId': ['a', 'a', 'b', 'b', 'c', 'd', 'e', 'f'],
        'pid': [5, 45, 33, 1, 45, 45, 45, 45],
        'bid': [1, 1, 1, 1, 1, 1, 1, 2],
        'torder': [140, 140, 15, 15, 90, 90, 90, 90],
        'px': [50, 90, 10, 5, 90, 90, 90, 90]
    }
)

returns = pd.DataFrame(
    {
        'pid': [33, 45, 1],
        'bid': [1, 1, 1],
        'px': [10, 90, 5],
        'amount': [1, 2, 1]
    }
)

orders['temp'] = 1
orders['rid'] = orders.groupby(['pid', 'bid', 'px'])['temp'].transform(pd.Series.cumsum)
orders = orders.merge(returns, on=['pid', 'bid', 'px'], how='outer').fillna(0)
left_orders = orders[orders.rid > orders.amount].drop(columns=['temp', 'rid', 'amount'])

print(left_orders)

输出:

  orderId  pid  bid  torder  px
0       a    5    1     140  50
3       d   45    1      90  90
4       e   45    1      90  90
7       f   45    2      90  90

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据另一个数据框的值删除一个数据框的行和列

来自分类Dev

Python根据另一个数据框中的列值匹配列名

来自分类Dev

Python根据另一个数据框中的列值匹配列名

来自分类Dev

根据与另一个数据框的(唯一)部分匹配,从数据框中删除行

来自分类Dev

根据另一个数据框中的列删除行

来自分类Dev

根据另一个数据框中的匹配ID替换数据框列值

来自分类Dev

根据与另一个数据框的匹配在数据框中创建新列

来自分类Dev

从数据框中删除与另一个数据框R中的两列匹配的行

来自分类Dev

根据匹配的值,使用另一个数据框中的值更新一个数据框中的列

来自分类Dev

根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

来自分类Dev

根据另一个数据框的列填充熊猫数据框列

来自分类Dev

根据另一个数据框的列对数据框列进行排序

来自分类Dev

根据另一个数据框从数据框中设置子集/选择列

来自分类Dev

根据另一个数据框计算数据框中的列值

来自分类Dev

根据另一个数据框向熊猫数据框列添加值

来自分类Dev

根据条件为另一个数据框的数据框列设置值

来自分类Dev

根据python中另一个数据框的2列过滤数据框

来自分类Dev

根据三列将一个Pandas数据框中的行与另一个数据框中的行进行匹配

来自分类Dev

R根据另一个数据框中的匹配名称替换同名

来自分类Dev

根据另一个数据集中的列值在一个数据框中创建列

来自分类Dev

删除不在另一个数据框中的数据框中的列

来自分类Dev

根据匹配其他列与另一个数据框的值来填充数据框的缺失值,同时保持不匹配的值

来自分类Dev

根据另一个(相同的行数)数据框对列进行分组

来自分类Dev

在另一个数据框的列上匹配一个数据框的列,如果匹配则添加一个新列

来自分类Dev

根据另一个数据框列值pyspark设置列状态

来自分类Dev

Python:如何从数据框中行查找数据并根据列匹配在另一个数据框中相乘

来自分类Dev

比较两个数据框,然后根据另一个数据框向其中一个数据框添加新列

来自分类Dev

根据dplyr与另一个数据框的匹配来更改数据框中的列名称

来自分类Dev

根据另一个数据框给出的匹配值从大列表中提取数据框

Related 相关文章

  1. 1

    根据另一个数据框的值删除一个数据框的行和列

  2. 2

    Python根据另一个数据框中的列值匹配列名

  3. 3

    Python根据另一个数据框中的列值匹配列名

  4. 4

    根据与另一个数据框的(唯一)部分匹配,从数据框中删除行

  5. 5

    根据另一个数据框中的列删除行

  6. 6

    根据另一个数据框中的匹配ID替换数据框列值

  7. 7

    根据与另一个数据框的匹配在数据框中创建新列

  8. 8

    从数据框中删除与另一个数据框R中的两列匹配的行

  9. 9

    根据匹配的值,使用另一个数据框中的值更新一个数据框中的列

  10. 10

    根据关键列值熊猫将一个数据框中的行与另一个数据框中的行匹配

  11. 11

    根据另一个数据框的列填充熊猫数据框列

  12. 12

    根据另一个数据框的列对数据框列进行排序

  13. 13

    根据另一个数据框从数据框中设置子集/选择列

  14. 14

    根据另一个数据框计算数据框中的列值

  15. 15

    根据另一个数据框向熊猫数据框列添加值

  16. 16

    根据条件为另一个数据框的数据框列设置值

  17. 17

    根据python中另一个数据框的2列过滤数据框

  18. 18

    根据三列将一个Pandas数据框中的行与另一个数据框中的行进行匹配

  19. 19

    R根据另一个数据框中的匹配名称替换同名

  20. 20

    根据另一个数据集中的列值在一个数据框中创建列

  21. 21

    删除不在另一个数据框中的数据框中的列

  22. 22

    根据匹配其他列与另一个数据框的值来填充数据框的缺失值,同时保持不匹配的值

  23. 23

    根据另一个(相同的行数)数据框对列进行分组

  24. 24

    在另一个数据框的列上匹配一个数据框的列,如果匹配则添加一个新列

  25. 25

    根据另一个数据框列值pyspark设置列状态

  26. 26

    Python:如何从数据框中行查找数据并根据列匹配在另一个数据框中相乘

  27. 27

    比较两个数据框,然后根据另一个数据框向其中一个数据框添加新列

  28. 28

    根据dplyr与另一个数据框的匹配来更改数据框中的列名称

  29. 29

    根据另一个数据框给出的匹配值从大列表中提取数据框

热门标签

归档