我有一个如下数据框。
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']
})
如果该值以先前的行值开头,则抛出错误
答案 0 :(得分:2)
我们可以使用:
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'
}