如何在用户函数内返回两个数据框

我的目的是创建一个像这样的函数

def function(x):
    mask_1 = (x["var_1"] == 0) & (x["var_2"] == 0) 
    df_1 = x[mask_1]
    df_1 = x[['A','B']].groupby(['A']).count().reset_index()
    df_1.rename(columns={'B':'my_fan_type_1'},inplace=True)
    mask_2 = (x["var_1"] == 0) & (x["var_2"] == 1)
    df_2 = x[['A','B']].groupby(['A']).count().reset_index()
    df_2.rename(columns={'B':'my_fan_type_2'},inplace=True)
    return df_1,df_2


df_1,df_2 = df_to_be_filtered.apply(function,axis=1)
简而言之,我有一个数据框,我想创建一个函数,该函数首先过滤一些行,然后基于这些行创建两个数据框,并按计数和计数进行分组。 这两种情况下要过滤的数据帧相同。如果创建此函数,则不会得到预期的结果。

您能帮我修复它吗?

jiayouboa 回答:如何在用户函数内返回两个数据框

为使代码正常工作,应首先将掩码应用于数据框。然后对过滤的数据帧进行操作。

def function(x):
    # construct df_1
    mask_1 = (x["var_1"] == 0) & (x["var_2"] == 0) 
    df_1 = x[mask_1][['A','B']].groupby(['A']).count().reset_index()
    df_1.rename(columns={'B':'my_fan_type_1'},inplace=True)

    # construct df_2
    mask_2 = (x["var_1"] == 0) & (x["var_2"] == 1)
    df_2 = x[mask_2][['A','B']].groupby(['A']).count().reset_index()
    df_2.rename(columns={'B':'my_fan_type_2'},inplace=True)

    return df_1,df_2

df_1,df_2 = function(df)

上面的代码对原始代码进行了最小的更改,分别构造了df1和df2并返回两者。

本文链接:https://www.f2er.com/3162646.html

大家都在问