我确信这是一个基本问题,但我在这里找不到正确的路径。在
让我们假设这样一个数据帧,它告诉每个人每周吃多少水果:
Name Fruit Amount
1 Jack Lemon 3
2 Mary Banana 6
3 Sophie Lemon 1
4 Sophie Cherry 10
5 Daniel Banana 2
6 Daniel Cherry 4
现在让我们假设我只想创建一个带有matplotlib
的条形图,以显示整个城镇每周每种水果的总食用量。要做到这一点,我必须按水果分组
在他的书中,pandas作者将groupby
描述为split-apply-combine
操作的第一部分:
因此,首先groupby将DataFrame
转换为DataFrameGroupBy
对象。然后,使用诸如sum
的方法,将结果合并到一个新的DataFrame
对象中。太好了,我现在可以创建我的果园了。在
但我面临的问题是当我不想sum
,diff
或对每个组成员应用任何操作时会发生什么。当我只想使用groupby
来保持每个水果类型只有一行的{unique
的水果列表,但这不是重点)。在
如果我这样做,groupby
的返回是一个DataFrameGroupBy
对象,而许多使用DataFrame
的操作都不使用DataFrameGroupBy
。在
这个问题,我相信很容易避免,让我很头疼。如何从groupby
获得DataFrame
,而不必应用任何聚合函数?有没有一个不同的解决方法,甚至没有使用groupby
,因为我在翻译中丢失了它?在
这一点让我觉得这可能是你想要的答案:
如果您只想删除基于
Fruit
的重复行,.drop_duplicates
就是最好的方法。在您对保留哪些行的控制有限,请参见docstring。在
这比
groupby
+first
更快、更可读。在IIUC您可以使用^{} ,它将返回
DataFrame
:如果要保留第一个元素,可以定义函数并将其传递给
^{pr2}$aggfunc
参数:如果您不希望您的
Fruit
作为索引,您还可以使用reset_index
:如果您只需要一些行,可以使用^{}-^{} +
reset_index
的组合-它将保留每个组的第一行:相关问题 更多 >
编程相关推荐