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']