我有一个数据:
ID,"address","used_at","active_seconds","pageviews"
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-09-30 18:14:58,57,4
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-09-30 20:11:15,1884,90
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-10-04 09:44:21,1146,6
4be390eefaf9a64e7cb52937c4a5c77a,"avito.ru",2014-09-29 21:01:29,48,3
我的日期只有2014
和2015
年。
我希望按address
进行分组,并获取每年到每个网站的用户数量,但我有错误
print(DataFrame({'count' : infile.groupby(["address", infile['used_at'].dt.year].ID.nunique())}))
AttributeError: 'list' object has no attribute 'ID'
我尝试重命名我的专栏
infile = pd.read_csv("avito_trend.csv", header=None, parse_dates=[2], low_memory=False, names=['user', 'address', 'date', 'duration', 'unknown'] )
但我没有结果。因为姓氏不会消失。
我该怎么做这个小组?
答案 0 :(得分:1)
我认为您可以添加reset_index
来创建DataFrame
,以便nunique
创建一些唯一身份用户(ID
):
infile = pd.read_csv("test/avito_trend.csv",
parse_dates=[2])
print (infile.groupby(["address",infile['used_at'].dt.year])['ID'].nunique()
.reset_index(name='count'))
address used_at count
0 am.ru 2014 621
1 am.ru 2015 273
2 auto.ru 2014 1752
3 auto.ru 2015 1595
4 avito.ru 2014 5460
5 avito.ru 2015 4631
6 avtomarket.ru 2014 314
7 avtomarket.ru 2015 215
8 cars.mail.ru/sale 2014 457
9 cars.mail.ru/sale 2015 271
10 drom.ru 2014 1934
11 drom.ru 2015 1623
12 e1.ru 2014 1654
13 e1.ru 2015 1359
14 irr.ru/cars 2014 619
15 irr.ru/cars 2015 426
或者,如果您需要所有用户的数量,请使用count
:
print (infile.groupby(["address",infile['used_at'].dt.year])['ID'].count()
.reset_index(name='count'))
address used_at count
0 am.ru 2014 1422
1 am.ru 2015 867
2 auto.ru 2014 14670
3 auto.ru 2015 13237
4 avito.ru 2014 150240
5 avito.ru 2015 145915
6 avtomarket.ru 2014 648
7 avtomarket.ru 2015 681
8 cars.mail.ru/sale 2014 1211
9 cars.mail.ru/sale 2015 726
10 drom.ru 2014 18678
11 drom.ru 2015 16194
12 e1.ru 2014 64426
13 e1.ru 2015 67164
14 irr.ru/cars 2014 1472
15 irr.ru/cars 2015 878