1

列を持つ Pandas DataFrame があります。

UserID, Date, (other columns that we can ignore here)

複数の日に訪問したユーザーのみを選択しようとしています。私は現在groupby(['UserID', 'Date'])、1 つの結果だけでユーザーをドロップする for ループでそれを行っていますが、これを行うにはもっと良い方法があるように感じます。

ありがとう

4

3 に答える 3

1

取得する出力の正確な形式によって異なりますが、各 UserID 内の個別の日付をカウントし、このカウント > 1 のすべてを取得できます ( having count(distinct Date) > 1SQL のように):

>>> 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結果として、複数の日付で訪問した唯一のユーザーであることがわかります

于 2013-10-31T03:15:59.543 に答える
0

すべての UserID の一意の日付カウントをカウントするには:

df.groupby("UserID").Date.agg(lambda s:len(s.unique()))

1 つのカウントのみでユーザーをドロップできます。

于 2013-10-31T03:17:34.067 に答える