将用户定义的函数应用于Pandas中的Group By的每个子组

时间:2013-12-09 21:05:29

标签: python group-by pandas

我现在已经和熊猫一起工作了一段时间,但是我真的让我的脚在功能上不受影响。

我定义了以下函数,最终对新列R,F,M和RFM进行排序和赋值:

def get_rfm(dataframe):
    dfr=dataframe.sort('last_order_date', ascending=True)
    get_var(dfr.R)

    dff=dfr.sort('number_of_orders', ascending=True)
    get_var(dff.F)

    dfm=dff.sort('total_price',ascending=True)
    get_var(dfm.M)

    dfm.RFM[:]=dfm['R']+dfm['M']+dfm['F']
    dfrfm=dfm.sort('RFM', ascending=True)
    print(dfrfm.info())
    return dfrfm

我在我的pandas数据帧上运行此函数,并得到看起来像预期结果的内容。我将它返回到一个新的df,然后我运行一些统计数据。

我现在要做的是在数据框上按功能分组,按其他列之一对它们进行分组,然后在子组上执行此分析。我试试

df.groupby('size_of_business').apply(get_rfm)

但结果并非我的预期。我返回了一个似乎是multiIndexed的Dataframe

<class 'pandas.core.frame.DataFrame'>
MultiIndex: 57196 entries, ( Did Not Answer, 67103) to (More than 10 people, 5617)
Data columns (total 11 columns):

然后是列表。 multiindex的第一部分应该是我对数据帧进行分组的名称,然后是看起来像索引的名称。

我认为应用将每个组视为子数据帧,然后我可以操作然后返回。我相信我对结构的理解是有缺陷的,而且我很难找到任何有助于纠正自己的东西。

1 个答案:

答案 0 :(得分:1)

您可以使用as_index = False:

df.groupby('size_of_business', as_index=False)