python 使用 pd.Series.mode 的 dataframe gropuby 在“by”列包含具有相同起始值的值时抛出错误
python dataframe gropuby using pd.Series.mode throws error when `by` column contains values with same starting value
我有一个数据框如下。
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
as Series.value_counts
降序排序我们也可以使用:
aggrFDColumnDetails = {
'Mood':lambda x: x.value_counts().index[0],
'Credit':'sum'
}
我有一个数据框如下。
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
as Series.value_counts
降序排序我们也可以使用:
aggrFDColumnDetails = {
'Mood':lambda x: x.value_counts().index[0],
'Credit':'sum'
}