24091


タイトルが分かりにくくて恐縮ですが、例えば以下の3個のデータフレームがあったとします。

・df_count  
|日付|件数|  
|2016-04-01|100|  
|2016-04-02|1000|  
|2016-04-03|300|  
|2016-04-04|1500|

・df_CP1  
|日付|キャンペーン名|  
|2016-04-02|CP1|

・df_CP2  
|日付|キャンペーン名|  
|2016-04-04|CP2|

df_CP1やdf_CP2にデータがある日付のみに、それぞれのキャンペーンフラグが立つカラムを  
df_countに追加したいのですが  
良い方法はないでしょうか？

・df_count_2  
|日付|件数|CP1フラグ|CP2フラグ|  
|2016-04-01|100|0|0|  
|2016-04-02|1000|1|0|  
|2016-04-03|300|0|0|  
|2016-04-04|1500|0|1|

※機械学習の元データにしたいと考えています。  
df_countとdf_CP1をleft joinさせればできそうな気がしたのですが、  
機械学習の元データにするためにはフラグ化が必要だと思い、フラグ化をするうまいやり方が思いつきませんでした。


CC BY-SA 3.0
2016-04-17T08:18:01.897
24089
2016-04-17T16:41:09.957
15188
question
python pandas
pandas 別のデータフレームにあるデータのみにフラグを付けたい


`df_CP1` と `df_CP2` データフレームの`キャンペーン名`カラムにある `CP1`, `CP2` を `1` に置き換えてから `left
join` を行って、`NaN` 値を `0` に置換するという方法があります。

[code]

    import pandas as pd
    
    df_count_2 = pd.merge(
      pd.merge(
        df_count,
        df_CP1.rename(columns={'キャンペーン名': 'CP1フラグ'})
              .replace({'CP1フラグ': {'CP1': 1}}), on='日付', how='left'
      ),
      df_CP2.rename(columns={'キャンペーン名': 'CP2フラグ'})
            .replace({'CP2フラグ': {'CP2': 1}}), on='日付', how='left'
    ).fillna(0)
    
[/code]

ただ、`df_CP1` と `df_CP2` データフレームに `キャンペーン名` カラムを含めなくてもよいとは思いますが、、

**追記**

`キャンペーン名`カラムを使わない場合(日付のみ)は以下の様になります。

[code]

    import pandas as pd
    
    # Clone
    df_count_2 = df_count.copy()
    
    # Add columns and initialize
    df_count_2['CP1フラグ'] = 0
    df_count_2['CP2フラグ'] = 0
    
    # Select and update
    df_count_2.loc[df_count_2['日付'].isin(df_CP1['日付']), 'CP1フラグ'] = 1
    df_count_2.loc[df_count_2['日付'].isin(df_CP2['日付']), 'CP2フラグ'] = 1
    
[/code]


CC BY-SA 3.0
2016-04-17T11:52:43.897
24091
2016-04-17T16:41:09.957
2016-04-17T16:41:09.957
24089
answer