我有一个Pandas DataFrame
,其中包含DATE
列和userid
列,如下所示:
userid DATE
0 vDKE27PF6z 2016-05-26
1 z6XJewg04Y 2016-05-25
2 e5Fsyak59l 2016-05-25
3 7SaYpGRtMI 2016-05-25
4 KGmTH0XOMz 2016-05-25
有许多不同的DATE
值,对于每个DATE
,特定的userid
可以出现两次。对于每个日期,我想计算与DATE
对应的行数除以为给定userid
显示的唯一DATE
值的数量。最好的方法是什么?我已经尝试了groupby
的各种排列,但这些排列并没有达到我想要的位置。
答案 0 :(得分:2)
df.groupby('DATE')['userid'].agg(lambda x:x.nunique()*1.0/x.count())
如果没有*1.0
,python3中的就可以了
答案 1 :(得分:2)
你应该可以这样做:
df = pd.DataFrame({"userid": ["vDKE27PF6z", "vDKE27PF6z", "e5Fsyak59l", "7SaYpGRtMI", "KGmTH0XOMz" ], "DATE" : ["2016-05-25","2016-05-25","2016-05-25","2016-05-25","2016-05-26"]})
dates = df.groupby("DATE").count() # Number of occurrences of each date
dates["uniques"] = df.groupby("DATE").userid.nunique() # Number of unique users per day
dates["ratio"] = dates.userid/dates.uniques # Ratio of the two
答案 2 :(得分:0)
pd.groupby
是要走的路。我想你正在寻找describe()
功能。它提供了有关DataFrame的简单统计信息。
data = pd.DataFrame({'userid':['vDKE27PF6z', 'z6XJewg04Y',
'e5Fsyak59l', '7SaYpGRtMI', 'KGmTH0XOMz'],
'DATE': ['2016-05-26', '2016-05-25',
'2016-05-25', '2016-05-25', '2016-05-25']})
for ind, grp in data.groupby('DATE'):
print(grp.describe())
输出是pd.DataFrame对象,该对象具有该组中对象数量的count
,以及该组中unique
个对象的数量。以下示例输出:
>>> DATE userid
count 4 4
unique 1 4
top 2016-05-25 7SaYpGRtMI
freq 4 1
>>> DATE userid
count 1 1
unique 1 1
top 2016-05-26 vDKE27PF6z
freq 1 1
日期'2016-05-25'的通知,有一个唯一的日期(当然)和4个唯一的用户ID。有关describe()
功能的更多信息,请访问:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html
答案 3 :(得分:0)
假设你有
df
userid DATE
0 vDKE27PF6z 2016-05-26
1 z6XJewg04Y 2016-05-25
2 e5Fsyak59l 2016-05-25
3 7SaYpGRtMI 2016-05-25
4 KGmTH0XOMz 2016-05-25
然后你可以按照以下步骤进行:
df.groupby('DATE',as_index=False).agg(lambda x: 1/len(np.unique(x)))
DATE userid
0 2016-05-25 0.25
1 2016-05-26 1.00