繁体   English   中英

查询sql到使用pandas dataframe

[英]Query sql to using pandas dataframe

我尝试使用 pandas dataframe 获取相同的结果来检索结果

这是我的 SQL 查询:

SELECT strftime('%m', date_report) as month, count(*) as total_infector 
from cases 
where  has_travel_history = 't' and age >= '50' 
group by month
order by total_infector desc limit 2

使用 pandas dataframe:

import pandas as pd
df = pd.read_csv("Data")

df['date'] = pd.to_datetime(df['date_report'])

df['month'] = df['date'].dt.month

df['age'] = df['age'].astype(str)

df1 = df[df['age'] >= '50'] 

我设法获得超过 50 岁的年龄。现在我正在尝试添加AND条件has_travel_history = 't' 有没有更简单的方法来做到这一点?

在 pandas 中,您可以使用以下语法使用一个或多个条件过滤 DataFrame:

df[ (df['col_1'] == 'value_1') & (df['col_2'] == 'value_2')]

请注意,“&”或“AND”运算符用于连接多个条件。 (类似地,您可以使用“|”来使用“或”条件。

在您的情况下,语法应为:

df_1 = df[ (df['age'] >= '50') & (df['has_travel_history'] == 't')]

现在,要使用 Pandas 完成查询的 rest,请使用“groupby”function 和“count”聚合器来获取每个月的所有计数。

df_1 = df_1.groupby(['month']).count()

接下来,您需要按降序对您的值进行排序,只需使用 'sort_value' function。

df_1.sort_values('total_infector', inplace=True, ascending=False)

最后,如果您只对前“n”个(在本例中为 2 个)样本感兴趣,只需使用“head”function

df_1 = df_1.head(2)

最后但同样重要的是,您可以像这样 select 您感兴趣的列:

df_1 = df_1.reset_index()[['month', 'total_infector']]
  • 请注意,使用了 'reset_index' function,因为我们之前在 'month' 列上使用了 'groupby' 方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM