熊猫groupby中的Rowwise联合

2021-05-13 13:18:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数据框,看起来像这样(并且可以用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'])

这似乎是一个相对简单的任务,我遗漏了什么?在

1条回答
网友
1楼 ·

简而言之,您需要使用aggregate方法,同时减少groupyby对象{a1}。在

现在下面的代码片段应该可以解决您的问题

读取时正确处理集合:元素以str形式出现,而不是{}

df.unique_ips = df.unique_ips.apply(eval)
df.shifted_ips = df.shifted_ips.apply(eval)

分组依据

^{pr2}$

结果是:

                             unique_ips            shifted_ips
user_nm   halves                                              
100118231 h1      set([142.136, 108.0])         set([142.136])
          h2      set([142.136, 108.0])  set([142.136, 108.0])
100406016 h1              set([50.192])                set([])
          h2              set([50.192])          set([50.192])

相关问题