pandas - 当`by`列包含具有相同起始值的值时,使用pd.Series.mode的python数据框gropuby会引发错误
问题描述
我有一个如下的数据框。
df2 = pd.DataFrame({
"Name" : ['Thomas', 'Thomas', 'Thomas John'],
"Credit" : [1200, 1300, 900],
"Mood" : ['sad', 'happy', 'happy']
})
我正在尝试将其分组如下。
aggrFDColumnDetails = {
'Mood':pd.Series.mode,
'Credit':'sum'
}
df2.groupby(['Name']).agg(aggrFDColumnDetails)
但它会引发以下错误
Exception: Must produce aggregated value
.....
....
and a lot of stack traces..
如果我将第三个名称更改为John
而不是Thomas John
,它将按预期工作。谁能帮我解决它?
分析 - 1 如果我按如下方式更改数据框,它可以工作
df2 = pd.DataFrame({
"Name" : ['Thomas John', 'Thomas John', 'Thomas'],
"Credit" : [1200, 1300, 900],
"Mood" : ['sad', 'happy', 'happy']
})
如果该值以前一行的值开头,则会引发错误
解决方案
我们可以使用:
aggrFDColumnDetails = {
'Mood':lambda x: x.value_counts().idxmax(),
'Credit':'sum'
}
df=df2.groupby(['Name']).agg(aggrFDColumnDetails)
print(df)
Mood Credit
Name
Thomas happy 2500
Thomas John happy 900
作为Series.value_counts
降序排序,我们还可以使用:
aggrFDColumnDetails = {
'Mood':lambda x: x.value_counts().index[0],
'Credit':'sum'
}
推荐阅读
- excel - 如何使用 VBA 在 Excel 中查找特定列并复制粘贴相应的列
- flutter - ListView 中单元格之间出现意外的水平线
- sql - 如何获取 Table_A 中具有 X 引用数的 Table_B 中的条目计数
- vue.js - vue-router中的scrollBehavior,返回循环数据的位置
- android - 为什么 LiveData 观察者返回以前的数据
- php - 如何显示批准或拒绝的休假状态?
- java - Flink 卡在创建检查点
- ios - 通过 WkWebView 直接从 Swift 访问 Ionic Storage
- amazon-web-services - AWS EMR:为 S3 Bucket 访问设置 hadoop 凭证提供程序
- amazon-web-services - AWS Cognito 中的用户名属性和别名属性有什么区别?