コラムパンダ内の負の値と一致する正の値を探して

wjie08:

私はいくつかの顧客取引データを持っており、顧客が製品を返却し、返金を得た行を削除したいと思います。

Iは、(使用済AMT)gross_sales、MEMBER_ID(会員識別)とtrx_date(取引日)、PRODUCT_KEY(製品コード)を含んでデータフレームと呼ばれるTRXを有しています。

私は総売上高(例えば、メンバー22444用21.30)での正の値は、総売上高(例えば、-21.30メンバー22444用)に負の値と一致する一意の各メンバーのためのすべての行を取得したいと思います。これは、製品は14日以内に返金されている場合、私が識別できるようになります。

私は、次のコードを試してみましたが、それはあまりにも長いコンパイルする取っています。

product key     gross_sales      member_id      trx_date
1001            14.50            10024          20-12-2018
1001            14.50            10024          20-12-2018 
1002            21.30            22444          10-10-2018
1003            11.10            516            05-10-2018
1002           -21.30            22444          23-10-2018
1005            5.50             1800           01-09-2018
1006            8.30             4221           01-09-2018
1003           -11.10            516            06-10-2018


neg_gross_sales = trx.gross_sales[trx.gross_sales < 0]
pos_gross_sales = trx.gross_sales[trx.gross_sales > 0]

matching_vals = []

for i in trx['member_id'].unique():
    for j in trx['gross_sales']:
        if j in abs(neg_gross_sales):
            if j in abs(pos_gross_sales):
                matching_vals.append(j)
            else:
                continue
        else:
            continue
print (matching_vals)

私はこのように見て、私の出力をしたいと思います

product key     gross_sales      member_id      trx_date
1002            21.30            22444          10-10-2018
1002           -21.30            22444          23-10-2018
1003            11.10            516            05-10-2018
1003           -11.10            516            06-10-2018

そこに何かが間違っているが、私のコードであったか、またはこれを行うには良い方法があった場合は、ヘルプの任意のフォームを認める場合には不思議でした、ありがとうございました!

rahlf23:

ここでは、ブールマスクを使用して簡単な方法だとtransform()

df[df.groupby(['member_id','product key'])['gross_sales'].transform('sum').eq(0)]

収量:

   product key  gross_sales  member_id   trx_date
2         1002         21.3      22444 2018-10-10
3         1003         11.1        516 2018-05-10
4         1002        -21.3      22444 2018-10-23
7         1003        -11.1        516 2018-06-10

ここから、あなたは、あなたの14日間返品ポリシーウィンドウを適用することができます。おそらくこのような何か(あなたと仮定trx_date列があるdatetime-type):

df[df.groupby(['member_id','product key'])['trx_date'].diff().dt.days.lt(14)]

収量:

   product key  gross_sales  member_id   trx_date
4         1002        -21.3      22444 2018-10-23

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=27981&siteId=1