別のデータフレームの日付条件に基づいて新しい列を作成します

ctd25

2つのデータフレームがあります。1つはトランザクション/注文情報を含み、もう1つはキャンペーンからの電子メールがいつ送信されるかを含みます。

import pandas as pd
email_data = {'Email' : ['[email protected]', '[email protected]', '[email protected]', '[email protected]'],
                     'email_sent_date' : ['2019-08-05', '2019-08-01', '2019-09-09', '2019-09-05'],
                     'CampaignName' : ['Campaign1', 'Campaign2', 'Campaign2', 'Campaign1']}

email_df = pd.DataFrame(email_data)

transaction_data = {'Email' : ['[email protected]', '[email protected]', '[email protected]', '[email protected]'],
         'order_date' : ['2019-09-05', '2019-09-10', '2019-09-05', '2019-09-10']}

transaction_df = pd.DataFrame(transaction_data)

私は質問に答えようとしています-特定のトランザクションについて、そのトランザクションの前に送信された最新の電子メールは何でしたか?

pd.applyを使用したソリューションがありますが、特に高速ではなく、トランザクション量が多い場合はおそらく持続可能ではありません。これを行うためのより良い方法があるかどうか疑問に思っています。

email_df.sort_values(by='email_sent_date', inplace=True)

def find_recent_email(x,df):
    #df should be the email_df, sorted by customer_email and date, in ascending order
    #so the most recent email is last
    return df[df['Email'] == x]['email_sent_date'].tail(1).values[0]

transaction_df['recent_email_date'] = pd.to_datetime(transaction_df['Email'].apply(find_recent_email, args=(email_df,)))
アンキー

最初に列を日時に変換します(すでに日時の場合-この手順は無視してください)。

email_df.email_sent_date=pd.to_datetime(email_df.email_sent_date)
transaction_df.order_date=pd.to_datetime(transaction_df.order_date)

両方のデータフレームの日付を並べ替えます。

a=email_df.sort_values('email_sent_date').drop('CampaignName',1)
b=transaction_df.sort_values('order_date')

を使用merge_asofすると、最初Emailby=param使用してマージし、次にdirection='nearest'を使用してasofマージを実行できます

pd.merge_asof(a,b,by='Email',left_on='email_sent_date',
                   right_on='order_date',direction='nearest')

             Email email_sent_date order_date
0   [email protected]      2019-08-01 2019-09-05
1   [email protected]      2019-08-05 2019-09-05
2  [email protected]      2019-09-05 2019-09-05
3  [email protected]      2019-09-09 2019-09-10

使用したパラメータ:

by:列名または列名のリストマージ操作を実行する前に、これらの列を照合します。

left_by:列名左側のDataFrameで一致するフィールド名。

right_by:列名右側のDataFrameで一致するフィールド名。

方向:「後方」(デフォルト)、「前方」、または「最も近い」前、後、または最も近い一致を検索するかどうか。

また、次のようにtolerance読み取るparamを確認することもできます。

許容値:整数またはTimedelta、オプション、デフォルトなしこの範囲内の許容値を選択します。マージインデックスと互換性がある必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

既存の列の条件に基づいて、データフレームに新しい列を作成します

分類Dev

Python:さまざまなサイズのデータフレームを操作して、日時の条件に基づいて新しい列を作成します

分類Dev

Rのデータフレームの新しい列として(日付に基づく)条件付き合計を作成する

分類Dev

別のデータフレームforループの条件に基づいて新しいデータフレームを作成します

分類Dev

データフレームに別の列を作成して、日付に基づいて月の週を除外します

分類Dev

条件を含む文字列に基づいてデータフレームの新しい列を作成する方法

分類Dev

別のデータフレームに基づいて新しいデータフレームを作成する

分類Dev

Rの条件に基づいて、データフレームに複数の新しい列を追加します

分類Dev

別のデータフレームに基づいてパンダに新しい列を作成する

分類Dev

データフレーム内の既存の時間列に基づいて新しい列を作成します

分類Dev

複数の列の値に基づいて新しいデータフレーム列を作成します

分類Dev

pandasデータフレームの他の列に基づいて新しい列を作成します

分類Dev

列の複数の値に基づいてデータフレームに新しい行を作成します

分類Dev

条件に基づいて、データフレーム列の値を別の列の値に変更します

分類Dev

1つの列の条件に基づいて、他の列からプルして、データフレームに新しい変数を作成しますか?(dplyr)

分類Dev

データフレームは、他の列に基づいて新しい列を作成します

分類Dev

pandasデータフレームを使用して、新しい変数を作成し、日付範囲に基づいて条件値を適用します

分類Dev

あるデータフレームの列の値とRの別のデータフレームの列ヘッダー名に基づいて条件付きで新しい列を作成する方法

分類Dev

列(R)の値に基づいていくつかの条件を使用して新しいデータフレームを作成します

分類Dev

R-条件に基づいてデータフレームに新しい列を作成します

分類Dev

別のデータフレームの条件に基づいて新しいデータフレームを作成する方法

分類Dev

別の行の条件に基づいてPandasデータフレームに新しい列を作成する最適な方法は何ですか?

分類Dev

Pyspark:udfを使用して、別のデータフレームの値に基づいてデータフレームに新しい列を追加します

分類Dev

Python:データフレーム内の既存の列に基づいて日付を含む新しい列を追加します

分類Dev

他の2つのデータフレーム列の値の条件に基づいて新しい列を作成します

分類Dev

別のデータフレームの列に基づいて、あるデータフレームに新しい列を作成する

分類Dev

Pythonは、別の列の条件に基づいてデータフレームに行を追加します

分類Dev

条件に基づいて別のデータフレームの値からデータフレームに新しい列を追加する

分類Dev

R dplyr / tidyverseデータフレームの複数の列に基づいて最大日付を取得します

Related 関連記事

  1. 1

    既存の列の条件に基づいて、データフレームに新しい列を作成します

  2. 2

    Python:さまざまなサイズのデータフレームを操作して、日時の条件に基づいて新しい列を作成します

  3. 3

    Rのデータフレームの新しい列として(日付に基づく)条件付き合計を作成する

  4. 4

    別のデータフレームforループの条件に基づいて新しいデータフレームを作成します

  5. 5

    データフレームに別の列を作成して、日付に基づいて月の週を除外します

  6. 6

    条件を含む文字列に基づいてデータフレームの新しい列を作成する方法

  7. 7

    別のデータフレームに基づいて新しいデータフレームを作成する

  8. 8

    Rの条件に基づいて、データフレームに複数の新しい列を追加します

  9. 9

    別のデータフレームに基づいてパンダに新しい列を作成する

  10. 10

    データフレーム内の既存の時間列に基づいて新しい列を作成します

  11. 11

    複数の列の値に基づいて新しいデータフレーム列を作成します

  12. 12

    pandasデータフレームの他の列に基づいて新しい列を作成します

  13. 13

    列の複数の値に基づいてデータフレームに新しい行を作成します

  14. 14

    条件に基づいて、データフレーム列の値を別の列の値に変更します

  15. 15

    1つの列の条件に基づいて、他の列からプルして、データフレームに新しい変数を作成しますか?(dplyr)

  16. 16

    データフレームは、他の列に基づいて新しい列を作成します

  17. 17

    pandasデータフレームを使用して、新しい変数を作成し、日付範囲に基づいて条件値を適用します

  18. 18

    あるデータフレームの列の値とRの別のデータフレームの列ヘッダー名に基づいて条件付きで新しい列を作成する方法

  19. 19

    列(R)の値に基づいていくつかの条件を使用して新しいデータフレームを作成します

  20. 20

    R-条件に基づいてデータフレームに新しい列を作成します

  21. 21

    別のデータフレームの条件に基づいて新しいデータフレームを作成する方法

  22. 22

    別の行の条件に基づいてPandasデータフレームに新しい列を作成する最適な方法は何ですか?

  23. 23

    Pyspark:udfを使用して、別のデータフレームの値に基づいてデータフレームに新しい列を追加します

  24. 24

    Python:データフレーム内の既存の列に基づいて日付を含む新しい列を追加します

  25. 25

    他の2つのデータフレーム列の値の条件に基づいて新しい列を作成します

  26. 26

    別のデータフレームの列に基づいて、あるデータフレームに新しい列を作成する

  27. 27

    Pythonは、別の列の条件に基づいてデータフレームに行を追加します

  28. 28

    条件に基づいて別のデータフレームの値からデータフレームに新しい列を追加する

  29. 29

    R dplyr / tidyverseデータフレームの複数の列に基づいて最大日付を取得します

ホットタグ

アーカイブ