Итак, я создаю две отдельные pandas сводные таблицы с кодом ниже
df = pd.read_excel('Report.xlsx')
df_past = df[df['Delivery'] < today]
df_future=df[df['Delivery'] > today]
table_past = pd.pivot_table(
data=df_past,
values=['Order', 'Prod'],
index=['Sales Order', 'Name', 'Delivery'],
aggfunc={'Order':np.sum, 'Prod':np.sum}
)
table_future = pd.pivot_table(
data=df_future,
values=['Order', 'Prod'],
index=['Sales Order', 'Name', 'Delivery'],
aggfunc={'Order':np.sum, 'Prod':np.sum}
)
, который создает следующие две таблицы.
Order Prod
Sales Order Name Delivery
B11156456 Amazon 2020-02-18 19 2
B11164868 Google 2020-02-19 10 3
B11165869 Facebook 2020-02-15 130 0
Order Prod
Sales Order Name Delivery
B11164868 Google 2020-02-27 15 9
B11165869 Facebook 2020-02-24 94 15
B11167123 Tesla 2020-02-27 365 69
B11168132 Samsung 2020-02-28 285 57
B11169563 Lenovo 2020-03-01 105 7
, поэтому я хочу затем объединить эти две сводные таблицы в номере заказа со следующим кодом
final_table = table_past.merge(table_future,
on=['Sales Order', 'Name'],
suffixes=('_past', '_future'),
how='inner'
)
Так что это работает, но я не могу поддерживать столбец доставки. Из-за того, что это индекс, а не значение. Но я не могу использовать его как поле значения, потому что я не использую на нем никакой aggfun c. Таким образом, он дает мне информацию ниже, в которой есть все, что мне нужно, за исключением доставки.
Order Balance_past Prod Balance_past Order Balance_future Prod Balance_future
Sales Order Name
B11156456 Amazon 19 2 NaN NaN
B11164868 Google 10 3 15.0 9.0
B11165869 Facebook 130 0 94.0 15.0
Моя цель состоит в том, чтобы информация отображалась как можно ближе к приведенной ниже
Order Prod
Sales Order Name Delivery
B11156456 Amazon 2020-02-18 19 2
B11164868 Google 2020-02-19 10 3
2020-02-27 15 9
B11165869 Facebook 2020-02-15 130 0
2020-02-24 94 15
B11167123 Tesla 2020-02-27 365 69
B11168132 Samsung 2020-02-28 285 57
B11169563 Lenovo 2020-03-01 105 7
Но Я не могу сделать это напрямую, потому что мне нужно включить ТОЛЬКО вторую дату Доставки для каждого Заказа на продажу, если первая Дата Доставки сегодня или ранее. Так, например, я не хочу включать номер заказа на продажу B11169563, потому что у него есть одна дата в будущем, но я хочу включить номер заказа на продажу B11164868, потому что первая дата предшествует сегодня, а вторая дата находится в будущее. И я также хочу включить B11156456, потому что у него есть одна дата, и это в прошлом. Или для большей ясности. Если есть одна дата доставки, она должна быть в прошлом. Если есть две даты доставки, то одна должна быть в прошлом, а другая должна быть в будущем.