特定年份的熊猫数据框总和

时间:2019-12-03 20:07:27

标签: python pandas dataframe

我刚刚开始使用Pandas进行分析。

我在Pandas中有一个数据行,它有超过200万行,假设它叫做DF。 我需要创建一个变量,该变量向我显示名为“总计记录”的列的总和,但按年份将其分开,因此,可以说,一个变量用于2017年,另一个变量用于2018年,另一个变量用于2019年。 问题是,我的DATE列的格式如下:1/20/2018 是否有类似SQL语法的内容:

Select Sum("Total Records") 
From DF
Where date like '%2018';

我尝试使用df.query('date == 2018')['Total Records']。sum(),但它给了我一个语法错误。

假设DF看起来像这样:

Date      | Total Records
1-20-2019 | 100
3-12-2018 | 50
5-14-2019 | 100
3-10-2018 | 20   

我希望它输出这样的变量

TotalRecords2018 = 70;
TotalRecords2019 = 200;

3 个答案:

答案 0 :(得分:0)

方法1 :推荐的方法是将“日期”列的类型转换为日期时间。

类似

df['Date'] = df['Date'].astype('datetime64')

然后分开年份并应用总计“和”

OR

方法2 :拆分字符串

如果要保留数据类型,请基于'-'拆分字符串。

df['day', 'month', 'year'] = df.Date.split("-",expand=True)

使用新的“年份”列进行分组和求和。

df.groupby('year")['Total Records'].sum()

答案 1 :(得分:0)

您可以尝试以下方法:


e = df

e.Date = (e.Date.apply(lambda x: pd.to_datetime(x, format="%d-%M-%Y"))).dt.strftime('TotalRecords%Y')  
e.groupby('Date')['Total Records'].sum().to_dict() 

# {'TotalRecords2018': 70, 'TotalRecords2019': 200}

答案 2 :(得分:0)

这是在熊猫中使用groupby方法的一个示例。

import pandas as pd

data = [["1-20-2019", 100], ["3-12-2018", 50], ["5-14-2019", 100], ["3-10-2018", 20]]
columns = ["Date", "Total Records"]

df = pd.DataFrame(data, columns=columns)

df['Date'] = pd.to_datetime(df['Date']) 

result = df.groupby(df.Date.dt.to_period("Y"))['Total Records'].sum()

for year, records in result.items():
    print(f"TotalRecords{year} = {records}")

输出

TotalRecords2018 = 70
TotalRecords2019 = 200