Преобразование запроса доступа в скрипт Python - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть Access Access-запрос, который я хочу преобразовать в Python Script:

SELECT 
 [Functional_Details].Customer_No, 
 Sum([Functional_Details].[SUM(Incoming_Hours)]) AS [SumOfSUM(Incoming_Hours)], 
 Sum([Functional_Details].[SUM(Incoming_Minutes)]) AS [SumOfSUM(Incoming_Minutes)], 
 Sum([Functional_Details].[SUM(Incoming_Seconds)]) AS [SumOfSUM(Incoming_Seconds)], 
 [Functional_Details].Rate, 
 [Functional_Details].Customer_Type
FROM [Functional_Details]
WHERE(
    (([Functional_Details].User_ID) Not In ("IND")) 
    AND 
    (([Functional_Details].Incoming_ID)="Airtel") 
    AND 
    (([Functional_Details].Incoming_Category)="Foreign") 
    AND 
    (([Functional_Details].Outgoing_ID)="Airtel") 
    AND 
    (([Functional_Details].Outgoing_Category)="Foreign") 
    AND 
    (([Functional_Details].Current_Operation)="NO") 
    AND 
    (([Functional_Details].Active)="NO")
)
GROUP BY [Functional_Details].Customer_No, [Functional_Details].Rate, [Functional_Details].Customer_Type
HAVING ((([Functional_Details].Customer_Type)="Check"));

У меня есть Functional_Details, хранящиеся в фрейме данных: df_functional_details

Я не являюсьв состоянии понять, как продолжить работу со скриптом Python.

До сих пор я пытался:

df_fd_temp=df_functional_details.copy()

if(df_fd_temp['User_ID'] != 'IND' 
    and df_fd_temp['Incoming_ID'] == 'Airtel' 
    and df_fd_temp['Incoming_Category'] == 'Foreign' 
    and df_fd_temp['Outgoing_ID'] == 'Airtel'
    and df_fd_temp['Outgoing_Category'] == 'Foreign' 
    and df_fd_temp['Current_Operation'] == 'NO' 
    and df_fd_temp['Active'] == 'NO'):
     df_fd_temp.groupby(['Customer_No','Rate','Customer_Type']).groups
     df_fd_temp[df_fd_temp['Customer_Type'].str.contains("Check")]

1 Ответ

0 голосов
/ 21 сентября 2018

Сначала выберите строки, к которым применяются условия (обратите внимание на круглые скобки и & вместо and):

df_fd_temp = df_fd_temp[(df_fd_temp['User_ID'] != 'IND') &
    (df_fd_temp['Incoming_ID'] == 'Airtel') &
    (df_fd_temp['Incoming_Category'] == 'Foreign') & 
    (df_fd_temp['Outgoing_ID'] == 'Airtel') &
    (df_fd_temp['Outgoing_Category'] == 'Foreign') & 
    (df_fd_temp['Current_Operation'] == 'NO') &
    (df_fd_temp['Active'] == 'NO')]

Затем выполните логику группировки по группам:

 df_grouped = df_fd_temp.groupby(['Customer_No','Rate','Customer_Type'])

Теперь у вас есть объект groupby, которым вы можете дополнительно манипулировать и фильтровать:

df_grouped.filter(lambda x: "Check" in x['Customer_Type'])

Возможно, вам потребуется настроить групповую фильтрацию в зависимости от того, как выглядит ваш фактический набор данных.

Дальнейшее чтение: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.filter.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...