2016-09-29 49 views
1

我有一個熊貓數據幀:蟒蛇大熊貓分組排序和連接

df = pd.DataFrame({'a': [1,1,1,1,2,2,2], 'b': ['a','a','a','a','b','b','b'], 'c': ['o','o','o','o','p','p','p'], 'd': [ [2,3,4], [1,3,3,4], [3,3,1,2], [4,1,2], [8,2,1], [0,9,1,2,3], [4,3,1] ], 'e': [13,12,5,10,3,2,5] }) 

我要的是:

由A,B,C列的第一組---有兩組

然後排序每組中根據以升序

每個組列d內最後級聯塔E

所以結果我想要的是:

result = pd.DataFrame({'a':[1,2], 'b':['a','b'], 'c':['o','p'], 'd':[[3,3,1,2,4,1,2,1,3,3,4,2,3,4],[0,9,1,2,3,8,2,1,4,3,1]]}) 

任何人都可以分享一些快速/優雅的方式來解決這個問題?非常感謝。

回答

1

您可以通過列e,組排序abc,然後使用列表理解來串聯d列(壓平)。請注意,我們可以使用sort然後groupby因爲GROUPBY將

保持在觀測各組內排序順序:根據doc here:

(df.sort_values('e').groupby(['a', 'b', 'c'])['d'] 
        .apply(lambda g: [j for i in g for j in i]).reset_index()) 

enter image description here

清單理解的替代方案是來回連鎖m itertools:

from itertools import chain 
(df.sort_values('e').groupby(['a', 'b', 'c'])['d'] 
        .apply(lambda g: list(chain.from_iterable(g))).reset_index())