我有带数据的csv文件
ID address used_at active_seconds
0 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2014-03-17 00:24:47 148
1 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2014-03-17 01:08:29 34
2 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2014-05-02 17:47:39 22
3 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2015-01-03 01:37:05 224
4 bcb0cc3d7f01dc6297f1331362a0fc09 e1.ru 2015-01-11 03:49:50 54
5 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2015-03-10 22:11:01 26
6 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2015-03-25 03:02:07 22
7 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-02-05 09:25:56 6
8 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-03-18 11:27:49 244
9 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-04-02 09:01:50 634
10 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-04-04 15:44:50 4206
11 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-04-08 09:30:25 196
12 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-05-11 02:09:27 50
13 690ef4613fd977f9c29e1124b9d5814c avito.ru 2014-05-17 14:41:51 838
14 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-05 13:35:19 2038
15 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-05 17:12:48 170
16 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-06 01:16:08 136
17 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-07 23:06:52 657
18 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-09 22:43:05 170
19 4be390eefaf9a64e7cb52937c4a5c77a drom.ru 2014-01-09 20:09:21 44
20 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-10 18:42:42 54
21 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-12 12:19:20 880
22 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-13 19:38:59 462
23 4be390eefaf9a64e7cb52937c4a5c77a e1.ru 2014-01-17 18:48:06 590
24 4be390eefaf9a64e7cb52937c4a5c77a drom.ru 2014-01-17 18:31:04 996
25 4be390eefaf9a64e7cb52937c4a5c77a auto.ru 2014-01-17 18:46:28 26
我需要为每个地址打印相同和不同ID的数量。 例如
3 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2015-01-03 01:37:05 224
4 bcb0cc3d7f01dc6297f1331362a0fc09 e1.ru 2015-01-11 03:49:50 54
有一个用户(ID)访问了两个站点。我需要为2014年和2015年的每对网站打印所有相同的唯一用户。它看起来像avito.ru el.ru - 1 common user at 2014
我不明白我怎么能这样做,因为所有的方法都在2列,而不是分开。我需要分别打印2014年和2015年的印刷品(此文件仅包括2014年和2015年)。 file with all data
答案 0 :(得分:2)
您可以尝试nunique
和value_counts
:
print df.groupby(['address', df['used_at'].dt.year])['ID'].nunique().reset_index(name='a')
address used_at a
0 auto.ru 2014 1
1 avito.ru 2014 2
2 avito.ru 2015 1
3 drom.ru 2014 1
4 e1.ru 2014 1
5 e1.ru 2015 1
df1=df.groupby(['address',df['used_at'].dt.year])['ID'].value_counts().reset_index(name='b')
print df1
address used_at ID b
0 auto.ru 2014 4be390eefaf9a64e7cb52937c4a5c77a 1
1 avito.ru 2014 690ef4613fd977f9c29e1124b9d5814c 7
2 avito.ru 2014 bcb0cc3d7f01dc6297f1331362a0fc09 3
3 avito.ru 2015 bcb0cc3d7f01dc6297f1331362a0fc09 3
4 drom.ru 2014 4be390eefaf9a64e7cb52937c4a5c77a 2
5 e1.ru 2014 4be390eefaf9a64e7cb52937c4a5c77a 9
6 e1.ru 2015 bcb0cc3d7f01dc6297f1331362a0fc09 1
编辑:
我发现Series
和填充DataFrame
的交叉点的最终长度为Series
,其中包含所有组合的名称:
import pandas as pd
import itertools
df = pd.read_csv("avito_trend.csv",
parse_dates=[2])
def f(df):
dfs = []
for x in [list(x) for x in itertools.combinations(df['address'].unique(), 2)]:
c1 = df.loc[df['address'].isin([x[0]]), 'ID']
c2 = df.loc[df['address'].isin([x[1]]), 'ID']
c = pd.Series(list(set(c1).intersection(set(c2))))
dfs.append(pd.DataFrame({'a':len(c), 'b':' and '.join(x)}, index=[0]))
return pd.concat(dfs)
print df.groupby([df['used_at'].dt.year]).apply(f).reset_index(drop=True, level=1).reset_index()
used_at a b
0 2014 1364 avito.ru and e1.ru
1 2014 1716 avito.ru and drom.ru
2 2014 1602 avito.ru and auto.ru
3 2014 299 avito.ru and avtomarket.ru
4 2014 579 avito.ru and am.ru
5 2014 602 avito.ru and irr.ru/cars
6 2014 424 avito.ru and cars.mail.ru/sale
7 2014 634 e1.ru and drom.ru
8 2014 475 e1.ru and auto.ru
9 2014 139 e1.ru and avtomarket.ru
10 2014 224 e1.ru and am.ru
11 2014 235 e1.ru and irr.ru/cars
12 2014 154 e1.ru and cars.mail.ru/sale
13 2014 874 drom.ru and auto.ru
14 2014 247 drom.ru and avtomarket.ru
15 2014 394 drom.ru and am.ru
16 2014 423 drom.ru and irr.ru/cars
17 2014 292 drom.ru and cars.mail.ru/sale
18 2014 243 auto.ru and avtomarket.ru
19 2014 408 auto.ru and am.ru
20 2014 409 auto.ru and irr.ru/cars
21 2014 330 auto.ru and cars.mail.ru/sale
22 2014 133 avtomarket.ru and am.ru
23 2014 139 avtomarket.ru and irr.ru/cars
24 2014 105 avtomarket.ru and cars.mail.ru/sale
25 2014 223 am.ru and irr.ru/cars
26 2014 166 am.ru and cars.mail.ru/sale
27 2014 197 irr.ru/cars and cars.mail.ru/sale
28 2015 1153 avito.ru and e1.ru
29 2015 1473 avito.ru and auto.ru
30 2015 1491 avito.ru and drom.ru
31 2015 403 avito.ru and irr.ru/cars
32 2015 205 avito.ru and avtomarket.ru
33 2015 256 avito.ru and cars.mail.ru/sale
34 2015 262 avito.ru and am.ru
35 2015 451 e1.ru and auto.ru
36 2015 539 e1.ru and drom.ru
37 2015 148 e1.ru and irr.ru/cars
38 2015 105 e1.ru and avtomarket.ru
39 2015 105 e1.ru and cars.mail.ru/sale
40 2015 99 e1.ru and am.ru
41 2015 799 auto.ru and drom.ru
42 2015 288 auto.ru and irr.ru/cars
43 2015 162 auto.ru and avtomarket.ru
44 2015 195 auto.ru and cars.mail.ru/sale
45 2015 224 auto.ru and am.ru
46 2015 277 drom.ru and irr.ru/cars
47 2015 175 drom.ru and avtomarket.ru
48 2015 189 drom.ru and cars.mail.ru/sale
49 2015 187 drom.ru and am.ru
50 2015 73 irr.ru/cars and avtomarket.ru
51 2015 94 irr.ru/cars and cars.mail.ru/sale
52 2015 102 irr.ru/cars and am.ru
53 2015 48 avtomarket.ru and cars.mail.ru/sale
54 2015 72 avtomarket.ru and am.ru
55 2015 73 cars.mail.ru/sale and am.ru