Python - 尝试按年份分组并汇总销售数据时出错
Posted
技术标签:
【中文标题】Python - 尝试按年份分组并汇总销售数据时出错【英文标题】:Python - Error when trying to groupby year and summarize sales data 【发布时间】:2020-03-21 11:42:09 【问题描述】:我有一个交易数据集,我试图按年份汇总,但是当我运行时,输出是交易的单个金额。我已经使用 pd.read_csv 将 csv 导入 python 并清理了数据框中的一些列以及添加新列。
我正在使用以下代码生成下面的输出
df['Year'] = df['Date'].dt.year
df.groupby(df['Year'])['revenue'].agg(['sum'])
OUTPUT
Year Sum
2015 1203.21 1732.12 2551.01 1733.12 1323.44
2016 3203.21 1532.12 4431.01 1433.12 7323.44
2017 2203.21 122.12 131.01 1293.12 4223.44
2018 6203.21 232.12 1131.01 1533.12 4323.44
我有以下代码行将“收入”从字符串转换为浮点数
pd.to_numeric(df['revenue'])
年份、日期和收入都是我数据框中的列。我希望能够在上面的每一年中获得一个总数,而不是查看单个交易的价值。谢谢。
【问题讨论】:
df[['Year', 'revenue']].head()
的输出是什么?看起来你正在对字符串求和。
输出是第一年数据的前四笔交易的值。我更新了原始问题以包含将字符串转换为浮点数的代码
要查看它是否可能是收入字符串,请尝试:df.groupby('Year')['revenue'].apply(lambda x: x.str.strip().astype(float).sum())
。如果可行,您应该先将revenue
列转换为浮点数,然后再应用groupby
。
我认为你很接近,只需要分配 - df['revenue'] = pd.to_numeric(df['revenue'])
然后df['Year'] = df['Date'].dt.year df.groupby(df['Year'])['revenue'].agg(['sum'])
谢谢耶兹瑞尔。这样可行。亚历山大,如果它是一个字符串,你建议将收入转换为浮点数的代码吗?
【参考方案1】:
您可以分配 to_numeric
函数的返回输出,因为不能就地工作:
df['revenue'] = pd.to_numeric(df['revenue'])
替代解决方案:
df['revenue'] = df['revenue'].astype(float)
df['Year'] = df['Date'].dt.year
df1 = df.groupby('Year', as_index=False)['revenue'].sum()
如果想要单行解决方案:
df1=pd.to_numeric(df['revenue']).groupby(df['Date'].dt.year.rename('Year')).sum().reset_index()
【讨论】:
解决方案出现在 6 和 7 的幂的指数中,因为我正在处理数以百万计的数字。我在转换为浮点数时删除了所有的逗号和美元符号,但我将如何将它们重新添加。 @wolfblitza - 你能检查this吗? 谢谢。这有帮助。【参考方案2】:上面 Jezrael 提出的代码按预期工作。
我使用的是pd.to_numeric(df['revenue'])
,但现在已将其更改为df['revenue'] = pd.to_numeric(df['revenue'])
【讨论】:
以上是关于Python - 尝试按年份分组并汇总销售数据时出错的主要内容,如果未能解决你的问题,请参考以下文章