Python 如何使用pandas确定每个唯一用户的优先级操作

Python 如何使用pandas确定每个唯一用户的优先级操作,python,csv,pandas,statistics,Python,Csv,Pandas,Statistics,我有一个类似于 ID address used_at active_seconds pageviews bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2014-03-17 00:24:47 148 3 bcb0cc3d7f01dc6297f1331362a0fc09 avito.ru 2014-03-17 01:08:29 34

我有一个类似于

ID                                   address     used_at      active_seconds    pageviews
bcb0cc3d7f01dc6297f1331362a0fc09    avito.ru    2014-03-17 00:24:47   148   3
bcb0cc3d7f01dc6297f1331362a0fc09    avito.ru    2014-03-17 01:08:29   34    4
bcb0cc3d7f01dc6297f1331362a0fc09    avito.ru    2014-05-02 17:47:39   22    1
bcb0cc3d7f01dc6297f1331362a0fc09    avito.ru    2015-01-03 01:37:05   224   5
bcb0cc3d7f01dc6297f1331362a0fc09    e1.ru       2015-01-11 03:49:50   54    1
bcb0cc3d7f01dc6297f1331362a0fc09    avito.ru    2015-03-10 22:11:01   26    7
bcb0cc3d7f01dc6297f1331362a0fc09    avito.ru    2015-03-25 03:02:07   22    4
690ef4613fd977f9c29e1124b9d5814c    avito.ru    2014-02-05 09:25:56   6     3
690ef4613fd977f9c29e1124b9d5814c    avito.ru    2014-03-18 11:27:49   244   14
所有文件都在那里 我需要打印2014年和2015年用户的优先级相对于站点的变化情况。也就是说,有必要统计一下他们首先坐在什么网站上,然后坐在哪里

我想我需要一个回路

infile = pd.read_csv("avito_trend.csv", parse_dates=[2])
for id in infile['ID'].nunique():
但它不起作用。
我如何才能绕过所有的唯一id,并获取有关访问的信息?

您可以这样做:

import pandas as pd

cols = ['ID', 'address', 'used_at']
df = pd.read_csv(r'avito_trend.csv', parse_dates=['used_at'], usecols=cols)

# sort DF by ID, Timestamp, address
df.sort_values(['ID','used_at','address'], inplace=True)

# adding helper columns: 'prev_address' and 'time_diff'
df['prev_address'] = df['address'].shift()
df['time_diff'] = df['used_at'] - df['used_at'].shift()

# exclude those where  `address` == `prev_address`
df = df[df['address'] != df['prev_address']]
# exclude those with `time_diff` > 10 minutes (please set desired value)
df = df[df['time_diff'] <= pd.Timedelta('10min')]

# group by (address, prev_address, df.used_at.dt.year) and count results
df[['ID','address','prev_address']] \
  .groupby(['address','prev_address', df.used_at.dt.year]) \
  .count() \
  .reset_index()
更新2:

如果要将两列合并为一列:

new = df[['ID','address','prev_address']].groupby(['address','prev_address', df.used_at.dt.year]).count().reset_index()

new['visit'] = new['prev_address'] + ' -> ' + new['address']

您应该循环
infle['ID'].unique()
infle['ID'].unique()
只提供唯一用户的数量。您可以发布预期的输出吗?现在还不太清楚你想要实现什么…我需要得到这样的结果:
到avito.ru网站来了:233个用户来自el.ru,就像其他网站一样。
我需要得到每个网站的结果,那里的用户离开了,以及它的数量。在我想打印一个图形条形图之后,但是如果在例如
avito.ru
用户再次访问
avito.ru
之后,我们不添加
+1
如何将其按年份划分?(文件中只有2014年和2015年)@ldevyataykina,我已经更新了我的答案-请检查一下谢谢!它起作用了!你能说,我能打印一张这样的图表吗?2014年和2015年,不同的颜色是不同的。但是没有百分比,只有列的平均值。你说,我怎样才能把
地址
上一个地址
的列连接起来?@ldevyataykina,我的回答对你有帮助吗?;)
new = df[['ID','address','prev_address']].groupby(['address','prev_address', df.used_at.dt.year]).count().reset_index()

new['visit'] = new['prev_address'] + ' -> ' + new['address']