、次は助けることはありません。
「ループなし」の場合、再帰を使用することを意図している場合は、次のことは役に立ちません。
import pandas as pd
import numpy as np
df = pd.DataFrame([
[0,'user_x','2013-02-09','2013-02-11'],
[1,'user_x','2013-06-06','2013-06-08'],
[2,'user_x','2013-02-10','2013-02-13'],
[3,'user_y','2014-01-06','2014-01-11'],
[4,'user_x','2014-01-06','2014-01-11']])
df.columns = ['id','user','start','end']
merge_df = pd.merge(df, df, on=['user'], suffixes=['','_compare'])
merge_df['overlap'] = ((merge_df['start']>=merge_df['start_compare'])&(merge_df['start']<=merge_df['end_compare'])) | ((merge_df['end']>=merge_df['start_compare'])&(merge_df['end']<=merge_df['end_compare']))
result = merge_df[merge_df.overlap>0].groupby(['id','user','start','end']).agg({'id_compare':np.size}).reset_index()
結果だけサイドノート
id user start end id_compare
0 0 user_x 2013-02-09 2013-02-11 2
1 1 user_x 2013-06-06 2013-06-08 1
2 2 user_x 2013-02-10 2013-02-13 2
3 3 user_y 2014-01-06 2014-01-11 1
4 4 user_x 2014-01-06 2014-01-11 1
を次のように私は、SQLに読むことをお勧めします、これをよりよく理解するためには、それが参考になります。アイデアは簡単です。すべての行を同じユーザーID(pd.merge)と照合して、重複かどうかを判断し、最後に重複IDの出現をカウントするユーザーIDでグループ化します。
どのようなデータの例ですか? – White
@White私はモックを追加しました – Anisotropic