Pandas Dataframe 聚合对象类型
Posted
技术标签:
【中文标题】Pandas Dataframe 聚合对象类型【英文标题】:Pandas Dataframe Aggregate Object Type 【发布时间】:2021-07-28 17:17:43 【问题描述】:目标
我有一个带有浮点和对象类型的 pandas 数据框。
我想按“名称”列对数据框进行分组
groupped = df.groupby(["name"])
比聚合所有其他列。
我将某些列的浮点值加在一起
但我也有“对象类型”,目标是只保留 1 个对象类型,例如:第一个。他们是一样的。所以我尝试使用 min 但它不起作用但我找不到任何其他适用于对象类型的函数。
aggregated = groupped.agg(
'name' : ['min'],
'id' : ['min'],
'date' : ['min'],
'number_one' : ['sum'],
'type' : ['min'],
'number_two' : ['sum'],
)
错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-102-3594b7bd0c31> in <module>
9 'number_one' : ['sum'],
10 'type' : ['min'],
---> 11 'number_two' : ['sum'],
12 )
13
...
TypeError: '<=' not supported between instances of 'str' and 'float'
已经尝试过
pandas dataframe aggregate calculation Filtering Pandas Dataframe Aggregate Aggregating in panda dataframe Pandas - DataFrame aggregate behaving oddly Pandas Dataframe aggregating Statistics python pandas dataframe aggregate groupby Conditionally Aggregating Pandas DataFrame https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.agg.html【问题讨论】:
【参考方案1】:第一个想法是使用GroupBy.first
作为对象列:
aggregated = groupped.agg(
'name' : ['first'],
'id' : ['first'],
'date' : ['first'],
'number_one' : ['sum'],
'type' : ['first'],
'number_two' : ['sum'],
)
如果想避免MultiIndex
删除[]
:
aggregated = groupped.agg(
'name' : 'first',
'id' : 'first',
'date' : 'first',
'number_one' : 'sum',
'type' : 'first',
'number_two' : 'sum',
)
更通用的解决方案是数字列聚合sum
,而另一列在 lambda 函数中获取第一个值:
f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else x.iat[0]
aggregated = groupped.agg(f)
【讨论】:
30 秒内完美。谢谢。以上是关于Pandas Dataframe 聚合对象类型的主要内容,如果未能解决你的问题,请参考以下文章
《Pandas Cookbook》第02章 DataFrame基本操作
如何从 Pandas DataFrame 中获取值而不是索引和对象类型