У меня проблемы с созданием сводной таблицы Pandas.
Я хочу иметь два значения ['Balance', 'WAP']
в одном столбце ['Delivery']
.
Вот DataFrame, построенный из словаря:
dict_data = {
'Contract' : ['Contract 1', 'Contract 2', 'Contract 3', 'Contract 4'],
'Contract_Date': ['01/01/2019', '02/02/2019', '03/03/2019', '04/03/2019'],
'Delivery' : ['2019-01', '2019-01', '2019-02', '2019-03'],
'Price' : [90, 95, 100, 105],
'Balance': [50, 100, 150, 200]
}
df = pd.DataFrame.from_dict(dict_data)
df
Фрейм данных:
Contract Contract_Date Delivery Price Balance
0 Contract 1 01/01/2019 2019-01 90 50
1 Contract 2 02/02/2019 2019-01 95 100
2 Contract 3 03/03/2019 2019-02 100 150
3 Contract 4 04/03/2019 2019-03 105 200
Рассчитать средневзвешенную цену:
# Create WAP - Weighted Average Price
df['Value'] = df['Balance'] * df['Price']
df['WAP'] = df['Value'] / df['Balance']
df
Конструкция сводного стола:
# Use a dictionary to apply more than 1 type of aggregate onto the data
f = {'Balance': ['sum'], 'WAP': ['mean']}
df.pivot_table(
columns='Delivery',
values=['Balance', 'WAP'],
index=['Contract_Date', 'Contract'],
aggfunc=f
).replace(np.nan, '')
Я пытаюсь заставить 2 значения отображаться в одном столбце для более простого сравнения, как в приведенной ниже таблице (построенной вручную):
Delivery 2019-01 2019-02 2019-03
Contract Date Contract Balance WAP Balance WAP Balance WAP
01/01/2019 Contract 1 50 90
02/02/2019 Contract 2 100 95
03/03/2019 Contract 3 150 100
04/03/2019 Contract 4 200 105
Думаете ли вы где-нибудь на уровне стека / разборки для этой проблемы? Буду очень признателен за любую помощь, так как я все еще новичок в Пандах.