2016-07-06 23 views
2

我想结合某些行,但不是所有列的常见操作。我希望pbheadid和wpadr相等的行与其他行相同。在这里pickmaty应该总结,其他列应该从最后一个条目或最高pickdtm复制粘贴,但它被排序,所以最后一个条目会做。组合大熊猫行,其中不同列需要不同的动作

我可以预先搜索索引并将它们保存在字典中。并根据这些指标改变每一行/列。然而,这并不是那么简单和快速。我认为与熊猫groupby应该是可能的更快。帮助将不胜感激。这是一块数据的(注意,pbheadid类似,但在更大的数据集不改变):

pbheadid pbcarid  artid wpadr pickqty pickdtm 

76079450 61838504 370944 523-370p 1 00:00:47 
76079450 61838110 323775 523-372p 1 00:01:05 
76079450 61838225 323775 523-372p 2 00:01:13 
76079450 61838504 323775 523-372p 3 00:01:30 
76079450 61838497 355475 523-373p 1 00:01:45 
76079450 61838504 354194 523-377p 1 00:01:55 
76079450 61838110 267204 523-376p 5 00:02:26 
76079450 61838225 267204 523-376p 1 00:02:33 

,这应该是结果:

pbheadid pbcarid  artid wpadr pickqty pickdtm 
76079450 61838504 370944 523-370p 1 00:00:47 
76079450 61838504 323775 523-372p 6 00:01:30 
76079450 61838497 355475 523-373p 1 00:01:45 
76079450 61838504 354194 523-377p 1 00:01:55 
76079450 61838225 267204 523-376p 6 00:02:33 

提前非常感谢!

回答

1

IIUC你可以这样做:

In [21]: (df.groupby(['pbheadid','wpadr']) 
    ....: .agg({'pickqty':'sum', 'artid':'last', 'pbcarid':'last', 'pickdtm':'last'}) 
    ....: .reset_index() 
    ....:) 
Out[21]: 
    pbheadid  wpadr artid pickqty pbcarid pickdtm 
0 76079450 523-370p 370944  1 61838504 00:00:47 
1 76079450 523-372p 323775  6 61838504 00:01:30 
2 76079450 523-373p 355475  1 61838497 00:01:45 
3 76079450 523-376p 267204  6 61838225 00:02:33 
4 76079450 523-377p 354194  1 61838504 00:01:55