【问题标题】:Print Common Values for columns pandas打印 pandas 列的公共值
【发布时间】:2016-07-08 14:17:25
【问题描述】:

我有带有数据的 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

【问题讨论】:

  • 您的问题有点不清楚。您是否要查找地址对之间共有的用户数(avito.ru 和 e1.ru 之间有 1 个,drom.ru 和 avito.ru 之间有 3 个等?)
  • 是的。但我有一个任务:我需要确定主要竞争对手(网站),并且我有一个文件来做。 the file
  • 我需要查看所有常用方法,例如 avito 和其他网站。
  • @Idevyataykina - 您可以创建 8 到 10 行的样本并添加所需的输出,这样可以更好地解释您想要什么?或者可能是所有25 行?
  • 我有一个文件。我应该将 ID 的数量打印到网站上,例如 Avito。接下来我应该找到每个网站的所有用户数量,其 ID 与 ID Avito 一致。清楚了吗?

标签: python csv pandas


【解决方案1】:

你可以试试nuniquevalue_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

编辑:

我发现SeriesDataFrame 的交集长度为最终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

【讨论】:

  • 首先是独立用户数量。但第二不是唯一的。我试着解释一下:我需要找出每对网站有多少唯一用户(ID)是相同的。例如这个用户访问了3 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2015-01-03 01:37:05 224 4 bcb0cc3d7f01dc6297f1331362a0fc09 e1.ru 2015-01-11 03:49:50 54 2 webcite。在这个1ID = 2 address。我需要找到每一对网站的所有这些用户
  • 你能在queston中添加代码吗,因为在评论中它可读性不好?
  • 我已经附上了带有数据的文件并添加了更多解释。如果您不明白我的意思,请写信给我
  • 你能打开一个包含数据的文件并查看前 8 个字符串吗?这是 1 ID 和 8 访问 address。例如,我需要打印这 8 个字符串,avito.ru and el.ru 在 2015 年有 1 个常见的 ID,在 2014 年有 0 个常见的ID。我认为在你的结果中我看到了常见的 ID,但不是唯一的。如果 1 user 访问过 1 address 多次,我应该只考虑 1 次
  • 我想你可以在后面加上read_csv - df = df.drop_duplicates(['ID','address']) drop_duplicates 你可以通过print dfs2[0][dfs2[0].ID == 'bcb0cc3d7f01dc6297f1331362a0fc09']查看它
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多