Я создаю новый фрейм данных с именем dfLostBusiness, который будет включать заказы, которые соответствуют определенным критериям, в исходный фрейм данных с именем df и, следовательно, будут считаться "Потерянным бизнесом". Я использую логическое индексирование на df, а затем добавляю результат в dfLostBusiness. Я ожидаю, что dfLostBusiness просто добавит все маскированные значения друг к другу, чтобы получить dfLostBusiness с прибл. 1500 строк, как я вывожу в SQL. Вместо этого я чувствую, что каждая из команд маскирования заменяет все значения, кроме O, X по любой причине. Я также попытался поиграться с порядком маскирующих команд. Я использую среду ipython, которую я перезагружал несколько раз, чтобы не было никакого другого результата, поэтому должно быть что-то происходящее под капотом, что я не понимаю.
Используя append:
dfLostBusiness = pd.DataFrame()
m = (df['OrderType'].str.lower() == 'o') & (df['OrderStatus'].str.lower() == 'x')
dfLostBusiness = df[m].reset_index(drop=True)
dfLostBusiness[['OrderType', 'OrderStatus']].shape: (421, 2)
dfLostBusiness Preview:
OrderType OrderStatus
0 O X
1 O X
2 O X
3 O X
4 O X
m = (df['OrderType'].str.lower() == 'c')
dfLostBusiness.append(df[m], ignore_index=True)
dfLostBusiness[['OrderType', 'OrderStatus']].shape: (594, 2)
dfLostBusiness Preview:
OrderType OrderStatus
0 O X
1 O X
2 C S
3 C S
4 C C
m = ((df['OrderType'].str.lower() == 'q') & ((datetime.datetime.now() - df['OrderDate']) > pd.Timedelta(30, 'D')))
dfLostBusiness.append(df[m], ignore_index=True)
dfLostBusiness[['OrderType', 'OrderStatus']].shape: (1442, 2)
At this point, dfLostBusiness[dfLostBusiness['OrderType'].str.lower() == 'c'] outputs an EmptyDataframe
dfLostBusiness Preview:
OrderType OrderStatus
0 O X
1 O X
2 Q X
3 Q X
4 Q Q
m = ((df['OrderType'].str.lower() == 'q') & (df['OrderStatus'].str.lower() == 'r'))
dfLostBusiness.append(df[m], ignore_index=True)
dfLostBusiness[['OrderType', 'OrderStatus']].shape: (425, 2)
Here the rows drop to 425 from 1442, and there are only O,X and Q,R
dfLostBusiness Preview:
OrderType OrderStatus
0 O X
1 O X
2 O X
3 O X
4 Q R
Используя concat, я получил похожие неожиданные результаты:
dfLostBusiness = pd.DataFrame()
m = (df['OrderType'].str.lower() == 'o') & (df['OrderStatus'].str.lower() == 'x')
dfLostBusiness = df[m].reset_index(drop = True)
m = (df['OrderType'].str.lower() == 'c')
pd.concat([dfLostBusiness, df[m]], ignore_index = True)
m = ((df['OrderType'].str.lower() == 'q') & ((datetime.datetime.now() - df['OrderDate']) > pd.Timedelta(30, 'D')))
pd.concat([dfLostBusiness, df[m]], ignore_index = True)
m = ((df['OrderType'].str.lower() == 'q') & (df['OrderStatus'].str.lower() == 'r'))
pd.concat([dfLostBusiness, df[m]], ignore_index = True)