我刚刚开始使用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;
答案 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