私は訪問日の昇順でユーザーが訪れたページをリストした次のデータフレームを作成しました。 BLQ2_1〜BLQ2_5の合計5ページあります。時間順のページビューデータフレーム内の特定のページの前に以前に訪問したものを数える
user_id created_at PAGE
72672 2017-02-20 BLQ2_1
72672 2017-03-03 BLQ2_5
72672 2017-03-03 BLQ2_3
72672 2017-03-05 BLQ2_4
12370 2017-03-06 BLQ2_4
12370 2017-03-06 BLQ2_5
12370 2017-03-06 BLQ2_3
94822 2017-03-06 BLQ2_2
94822 2017-03-10 BLQ2_4
94822 2017-03-10 BLQ2_5
94822 2017-02-24 BLQ2_4
各ページについて、すべてのユーザーを考慮して訪問した前のページに関する統計情報を取得する必要があります。つまり、各ページの統計情報を計算する必要があります。
BLQ2_5へのパスは、BLQ2_4から2回、BLQ2_1から1回です。
BLQ2_3へのパスは、BLQ2_5から2回、BLQ2_4から1回です。
BLQ2_4へのパスは、BLQ2_5から1回、BLQ2_3から1回、BLQ2_2から1回、どこからも1回です。
ループを使用する必要がありますか?または、パンダの機能を利用する方法がありますか?groupby
助言がありますか?以下は
forループを使用して、私のソリューションです:
pg_BLQ2_5 = pd.DataFrame()
pg_BLQ2_4 = pd.DataFrame()
pg_BLQ2_3 = pd.DataFrame()
pg_BLQ2_2 = pd.DataFrame()
pg_BLQ2_1 = pd.DataFrame()
first_pages = pd.DataFrame()
for user_id in df['user_id'].unique():
#get only current user's records, and reset index
_pg = df[df['user_id'] == user_id].reset_index()
_pg.drop('index', axis=1, inplace=True)
#if this is the first page visited, treat differently
first_page = _pg.iloc[0]
first_pages = first_pages.append(first_page)
#exclude the first page visited from the dataframe
_pg = _pg.loc[1:].reset_index()
_pg.drop('index', axis=1, inplace=True)
#for each page, get the record from its previous index, and build the dataframe.
pg_BLQ2_5 = pg_BLQ2_5.append(_pg.iloc[_pg[_pg['PAGE'] == 'BLQ2_5'].index -1])
pg_BLQ2_4 = pg_BLQ2_4.append(_pg.iloc[_pg[_pg['PAGE'] == 'BLQ2_4'].index -1])
pg_BLQ2_3 = pg_BLQ2_3.append(_pg.iloc[_pg[_pg['PAGE'] == 'BLQ2_3'].index -1])
pg_BLQ2_2 = pg_BLQ2_2.append(_pg.iloc[_pg[_pg['PAGE'] == 'BLQ2_2'].index -1])
pg_BLQ2_1 = pg_BLQ2_1.append(_pg.iloc[_pg[_pg['PAGE'] == 'BLQ2_1'].index -1])
ありがとうございました。 OPの上で、forループを使って私のアプローチを共有しました。しかし、何らかの理由で私が得た結果は、あなたのソリューションで得た結果とはまったく異なります。いずれのソリューションでも問題は発生しませんが、問題を把握できませんでした。あなたは何か考えていますか?あなたのコードでは: 'BLQ2_2 - > BLQ2_1 = 151'、私のコードでは' 68'です。 – renakre
投稿した小さな例題はどうですか?私はあなたが提案したものとは異なる結果を得ていましたが、あなたは完全なデータフレームを示していないと思いました。これで別の結果も得られますか? – IanS
はい、私は共有したサンプルデータを使用して計算しようとしています。私のコードには問題があると思う。 – renakre