python-3.x - 创建函数以返回多个数据帧
问题描述
我正在寻找一个简单的函数来根据某一列中的值返回两个不同的数据帧。
这是我的数据:
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 语句。
解决方案
如果我了解您要做什么(您没有发布预期的输出),只需删除该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
推荐阅读
- angularjs - 如何使用一台 Express 服务器为两个 AngularJS 应用程序提供服务?
- apache - 错误:无法找到或加载主类 org.apache.nutch.crawl.Generator (Nutch 1.14)
- python - 在numpy python中向量化特征值计算
- windows-7 - 用于复制所选文件的自定义上下文菜单选项未按预期工作
- python - 在 Mac 上使用 Python 释放后,对象可能已被修改
- java - 404 错误 - 源服务器没有找到目标资源的当前表示或不愿意透露存在的表示
- r - R中矩阵的优化
- c++ - 在 Crypto++ 中将密钥传递给 AES 解密
- azure - 无法通过端口 8888 访问 Azure VM
- kubernetes - 无法将大文件上传到持久卷