首页 > 解决方案 > 创建函数以返回多个数据帧

问题描述

我正在寻找一个简单的函数来根据某一列中的值返回两个不同的数据帧。

这是我的数据:

np.random.seed(1111)
df = pd.DataFrame({
'Category':np.random.choice( ['Group A','Group B','Group C','Group D'], 10000),
'Sub-Category':np.random.choice( ['X','Y','Z'], 10000),
'Sub-Category-2':np.random.choice( ['G','F','I'], 10000),
'Product':np.random.choice( ['Product 1','Product 2','Product 3'], 10000),
'Units_Sold':np.random.randint(1,100, size=(10000)),
'Dollars_Sold':np.random.randint(100,1000, size=10000),
'Customer':np.random.choice(pd.util.testing.rands_array(10,25,dtype='str'),10000),
'Date':np.random.choice( pd.date_range('1/1/2016','12/31/2018',  
                      freq='M'), 10000)})

这是我正在尝试做的简化版本:

def summary(df_use):
    if df_use['Sub-Category'] == 'X':
        df1 = df_use.groupby(['Category','Sub-Category','Date']).agg({'Units_Sold':'sum'})\
            .unstack()
    elif df_use['Sub-Category'] == 'Y':
        df2 = df_use.groupby(['Category','Sub-Category','Date']).agg({'Dolars_Sold':'sum'})\
            .unstack()
    return df1, df2

我收到以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

任何帮助将不胜感激!如果可能的话,我希望使用 if 语句。

标签: python-3.xpandas

解决方案


如果我了解您要做什么(您没有发布预期的输出),只需删除该if语句并使用布尔索引:

def summary(df_use):
    df1 = df_use[df_use['Sub-Category'] == 'X'].groupby(['Category','Sub-Category','Date']).agg({'Units_Sold':'sum'})\
            .unstack()
    df2 = df_use[df_use['Sub-Category'] == 'Y'].groupby(['Category','Sub-Category','Date']).agg({'Dollars_Sold':'sum'})\
            .unstack()
    return df1, df2

推荐阅读