我想在分组数据框的每一列中打印唯一值,以下代码段不能按预期工作:
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))
)
我希望它能打印
1 [5] [11, 13]
2 [5] [12, 14]
虽然还有其他方法,但我想了解这种方法有什么问题。有什么想法吗?
答案 0 :(得分:2)
这应该可以解决问题:
print(df.groupby(['a', 'b'])['c'].unique())
a | b |
--+---+---------
1 | 5 | [11, 13]
2 | 5 | [12, 14]
关于您的方法有什么问题 - 当您groupby
df
然后apply
某个功能f
时,f
的输入将是除非另有说明,否则DataFrame包含所有df
列;就像我的代码段中带有['c']
一样。因此,您的第一个apply
传递的是一个包含3列的DataFrame,第二个apply
也是如此。然后你的函数also_print
遍历这3列中的每一列并将它们打印出来,这样你就可以为每一组打印3张。