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