Преобразование запроса доступа в скрипт Python

1

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

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, хранящиеся в dataframe: 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")]
Теги:
dataframe

1 ответ

0

Сначала выберите строки, в которых применяются условия (обратите внимание на круглые скобки и & вместо 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

  • 0
    Где я могу включить оператор «Выбрать»: 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 ?
  • 0
    Если у вас уже есть данные в фрейме данных, вам не нужно SELECT их, вы просто манипулируете существующим фреймом данных

Ещё вопросы

Сообщество Overcoder
Наверх
Меню