2016-06-13 11 views
2

でのキャンペーンのための最初の応答までの私は、時間、ターゲットと応答を(ユーザーがリンクを開くかどうかを)取り込むメールキャンペーンデータを持っています。応答1は、ユーザーがコンテンツを開いたことを意味します。キャプチャ行のpython

サンプルデータ:

senddate userid content response 
2016-06-01 100  50505 NaN 
2016-06-01 100  50505 NaN 
2016-06-01 100  50505 1 
2016-06-01 100  50505 1 
2016-06-02 100  50505 NaN 
2016-06-02 100  50505 1 
2016-06-02 100  50505 1 

は今、私は最初の応答までの行のみを保存しておきたいです。私は最初の応答の後に発生する行を破棄したい、私は複数の送信日のためにこれをしたい。

出力データセット:誰もがロジックをフレーミングに役立つことができれば

senddate userid content response 
    2016-06-01 100  50505 NaN 
    2016-06-01 100  50505 NaN 
    2016-06-01 100  50505 1 
    2016-06-02 100  50505 NaN 
    2016-06-02 100  50505 1 

、それは非常に高く評価されるだろう。

答えて

1

あなたはこれを達成するためにpandasを使用することができます。

あなたは私たちがfirst_valid_indexに対してインデックスを比較するブール値マスクを生成することができます「senddate」列にgroupby、これは最初のレベルであるマルチインデックスを作成する場合は日付と第二レベルはvalud指標値であり、私たちはその後、locを使用して、そのレベルとインデックスのためget_level_valuesを使用して、これらを検索:上記の

In [17]: 
import pandas as pd 
df = pd.read_csv(your_file_path) 
df.loc[df.groupby('senddate')['response'].apply(lambda x: x[x.index <= x.first_valid_index()]).index.get_level_values(1)] 

Out[17]: 
    senddate userid content response 
0 2016-06-01  100 50505  NaN 
1 2016-06-01  100 50505  NaN 
2 2016-06-01  100 50505  1.0 
4 2016-06-02  100 50505  NaN 
5 2016-06-02  100 50505  1.0 

内訳:

をEdchum..Thank @
In [18]: 
df.groupby('senddate')['response'].apply(lambda x: x[x.index <= x.first_valid_index()]) 

Out[18]: 
senddate  
2016-06-01 0 NaN 
      1 NaN 
      2 1.0 
2016-06-02 4 NaN 
      5 1.0 
Name: response, dtype: float64 

In [19]: 
df.groupby('senddate')['response'].apply(lambda x: x[x.index <= x.first_valid_index()]).index.get_level_values(1) 

Out[19]: 
Int64Index([0, 1, 2, 4, 5], dtype='int64') 
+0

あなたは非常に多くの回答を...私は小さな変更を持っていること...同じユーザのために、私は唯一の最初の応答までの行をキャプチャし、関係なく、送信日の他のすべての行を破棄したい場合に実現あなたは私を同じように助けてくれますか? – user2906657

+0

申し訳ありませんが、私の答えは、あなたが、私はここでしか編集しています...質問のテーマは同じonly..just 1になるので – EdChum

+0

を、それを受け入れる必要があり、あなたの元の質問を解決する場合は、むしろさらに、あなたの要件を変更するよりも、別の質問を投稿する必要がありますロジックの変化.... – user2906657

関連する問題