【发布时间】: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']) -
谢谢耶兹瑞尔。这样可行。亚历山大,如果它是一个字符串,你建议将收入转换为浮点数的代码吗?
标签: python pandas dataframe group-by sum