我有一个大数据框,看起来像这样(并且可以用df=pd.read_clipboard(sep='\s\s+')
复制粘贴):
user_nm month unique_ips shifted_ips halves quarters mo_pairs
100118231 2 set([142.136]) set([]) h1 q1 p1
100118231 3 set([142.136]) set([142.136]) h1 q1 p2
100118231 6 set([108.0]) set([142.136]) h1 q2 p3
100118231 7 set([108.0]) set([108.0]) h2 q3 p4
100118231 8 set([142.136]) set([108.0]) h2 q3 p4
100118231 9 set([142.136]) set([142.136]) h2 q3 p5
100118231 10 set([142.136]) set([142.136]) h2 q4 p5
100118231 11 set([142.136]) set([142.136]) h2 q4 p6
100406016 3 set([50.192]) set([]) h1 q1 p2
100406016 7 set([50.192]) set([50.192]) h2 q3 p4
对于每个用户,我想按halves
(或quarters
,或mo_pairs
)分组,得到unique_ips
和{
我可以按如下方式按字段分组:
^{pr2}$但是,当我试图合并这些行时,我得到一个错误:
In [267]: a.apply(lambda x: x[2] & x[3], axis=1)
TypeError: <lambda>() got an unexpected keyword argument 'axis'
理想情况下,我想要这样的东西:
unique_ips shifted_ips
user_nm halves
100118231 h1 set([142.136, 108.0]) set([142.136])
100118231 h2 set([142.136,108.0]) set([142.136,108.0])
100406016 h1 set([50.192]) set([])
100406016 h2 set([50.192]) set([50.192])
我也尝试过set_index
,但这并没有对数据帧进行适当的分组
b=df.set_index(['user_nm','halves'])
这似乎是一个相对简单的任务,我遗漏了什么?在
简而言之,您需要使用
aggregate
方法,同时减少groupyby
对象{a1}。在现在下面的代码片段应该可以解决您的问题
读取时正确处理集合:元素以}
str
形式出现,而不是{分组依据
^{pr2}$结果是:
相关问题 更多 >
编程相关推荐