python – Pandas – 返回数据框中的第一项,按用户分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Pandas – 返回数据框中的第一项,按用户分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1766字,纯文字阅读大概需要3分钟。
内容图文
![python – Pandas – 返回数据框中的第一项,按用户分组](/upload/InfoBanner/zyjiaocheng/817/0896be4f21894ce783220afc0428e9d7.jpg)
我有很多用户/项目/时间戳数据.我想知道所有用户首先消耗了哪些项目,第二个等等.
我的问题是:如果我有一个已经按时间(降序)排序的数据帧,它是否会默认通过groupby进程排序?并且,即使用户没有消耗两个项目,我如何拉出任何用户消耗的前两个项目?
import pandas as pd
df = pd.DataFrame({'item_id': ['b', 'b', 'a', 'c', 'a', 'b'], 'user_id': [1,2,1,1,3,1], 'time': range(6)})
print df
pd.get_dummies(df['item_id'])
gp = df.groupby('user_id').head()
print gp
# Return item_id of first one installed in each case ??
这给出了:
item_id time user_id
0 b 0 1
1 b 1 2
2 a 2 1
3 c 3 1
4 a 4 3
5 b 5 1
item_id time user_id
user_id
1 0 b 0 1
2 a 2 1
3 c 3 1
5 b 5 1
2 1 b 1 2
3 4 a 4 3
现在,我需要提取前两个item_id值,类似这样(但保留user_id列不是必需的):
user_id order item_id
1 0 b
1 1 a
2 0 b
3 0 a
解决方法:
这是一个黑客:
In [75]: def nth_order(x, n):
....: xn = x[:n]
....: return xn.join(Series(arange(len(xn)), name='order', index=xn.index))
....:
In [76]: df.groupby('user_id').apply(lambda x: nth_order(x, 2))
Out[76]:
item_id time user_id order
user_id
1 0 b 0 1 0
2 a 2 1 1
2 1 b 1 2 0
3 4 a 4 3 0
请注意,您不能只使用n,因为您可能有一个组len(group)< 2,因此 len(x [:n])!= n 在每种情况下(根据您的问题). 这是pandas中这种特殊切片的一个特征:如果切片在这里传递结束,你将获得每一行(并且可能没有n行),而对于iloc indexing,则不是这样.也就是说,如果您尝试切片超过数组的末尾,则会引发异常.
内容总结
以上是互联网集市为您收集整理的python – Pandas – 返回数据框中的第一项,按用户分组全部内容,希望文章能够帮你解决python – Pandas – 返回数据框中的第一项,按用户分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。