熊猫只返回重复的结果

时间:2013-10-31 02:09:56

标签: python pandas

我有一个带有列的Pandas DataFrame:

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

我正在尝试仅选择在多个日期访问过的用户。我目前正在使用groupby(['UserID', 'Date'])和for循环,我只删除一个结果,但我觉得有更好的方法来做到这一点。

由于

3 个答案:

答案 0 :(得分:1)

这取决于您想要获得的输出的确切格式,但您可以计算每个UserID中的不同日期,并获取此计数的所有内容> 1(如SQL中的having count(distinct Date) > 1):

>>> 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,这是在多个日期访问过的唯一用户

答案 1 :(得分:0)

计算每个UserID的唯一日期计数:

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

您只需支付一次即可删除用户。

答案 2 :(得分:0)

为了添加另一个答案,您还可以使用列表推导索引

DF = pd.DataFrame({'UserID' : [1, 1, 2, 3, 4, 4, 5], 'Data': np.random.rand(7)})
DF.ix[[row for row in DF.index if list(DF.UserID).count(DF.UserID[row])>1]]

这可能与你的for循环一样多,但它只是你考虑的另一种选择....