2017-03-11 178 views
0

我想在分组数据帧中的每一列打印唯一值获取唯一值和预期下面的代码段无法正常工作:大熊猫在每列

df = pd.DataFrame({'a' : [1, 2, 1, 2], 'b' : [5, 5, 5, 5], 'c' : [11, 12, 13, 14]}) 
print(
    df.groupby(['a']).apply(
    lambda df: df.apply(
     lambda col: col.unique(), axis=0)) 
) 

我期望它print

1 [5] [11, 13] 
2 [5] [12, 14] 

虽然还有其他方法可以这样做,但我想了解这种方法有什么问题。有任何想法吗?

回答

2

这应该做的伎俩:

print(df.groupby(['a', 'b'])['c'].unique()) 

a | b | 
--+---+--------- 
1 | 5 | [11, 13] 
2 | 5 | [12, 14] 

至于有什么错你的方法 - 当你groupbydf然后apply一些功能f,为f输入将与所有的df'一个数据帧除非另有说明(如我的代码片段['c'])。所以你的第一个apply传递一个DataFrame 3列,所以你的第二个apply。然后你的函数also_print遍历这3列中的每一列并将它们打印出来,所以你可以为每个组获得3个打印。

+0

这不会做我想要的不幸,我只想按'a'分组,然后在每个组中获得每列中的唯一值,就像我在上面给出的预期输出一样。 – iggy

+0

也忘记了关于also_print函数,我从问题中删除它,因为它没有关系。问题是关于最终的数据框。 – iggy

+0

这个怎么样? (df.columns [1:]],index = df.columns [1: ]))' –