列を持つ Pandas DataFrame があります。
UserID, Date, (other columns that we can ignore here)
複数の日に訪問したユーザーのみを選択しようとしています。私は現在groupby(['UserID', 'Date'])
、1 つの結果だけでユーザーをドロップする for ループでそれを行っていますが、これを行うにはもっと良い方法があるように感じます。
ありがとう
取得する出力の正確な形式によって異なりますが、各 UserID 内の個別の日付をカウントし、このカウント > 1 のすべてを取得できます ( having count(distinct Date) > 1
SQL のように):
>>> df
Date UserID
0 2013-01-01 00:00:00 1
1 2013-01-02 00:00:00 2
2 2013-01-02 00:00:00 2
3 2013-01-02 00:00:00 1
4 2013-01-02 00:00:00 3
>>> g = df.groupby('UserID').Date.nunique()
>>> g
UserID
1 2
2 1
3 1
>>> g > 1
UserID
1 True
2 False
3 False
dtype: bool
>>> g[g > 1]
UserID
1 2
UserID = 1
結果として、複数の日付で訪問した唯一のユーザーであることがわかります
すべての UserID の一意の日付カウントをカウントするには:
df.groupby("UserID").Date.agg(lambda s:len(s.unique()))
1 つのカウントのみでユーザーをドロップできます。