Панды добавляют / конкатат заменяют существующие значения в кадре данных - PullRequest
0 голосов
/ 19 октября 2019

Я создаю новый фрейм данных с именем 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...