Для удаления времен из столбца Datetime
используйте Series.str.split
:
df['DateTime'] = df['DateTime'].str.split(',').str[0]
Для добавления новой функции добавьте ее в словарь, как другие функции:
wm = lambda x: np.average(x, weights=df.loc[x.index, "Quantity"])
f = {'Quantity': 'sum', 'Commission': 'sum', 'TradePrice':wm}
Последнее, если необходимо, избежать потерянных столбцов и одинаковых значений для групп из столбцов Symbol
и Buy/Sell
. Добавьте его в groupby
:
cols = ['AssetClass', 'Symbol', 'UnderlyingSymbol', 'Multiplier', 'Strike',
'Expiry', 'Put/Call', 'DateTime', 'Buy/Sell']
df1 = df.groupby(cols).agg(f).reset_index()
print (df1)
AssetClass Symbol UnderlyingSymbol Multiplier Strike \
0 OPT ADBE 200221C00385000 ADBE 100 385
Expiry Put/Call DateTime Buy/Sell Quantity Commission TradePrice
0 20200221 C 20200218 BUY 3 7.0 1.34
Если имена столбцов не совпадают группы столбцов Symbol
и Buy/Sell
необходимо указать для каждой функции агрегирования столбцов и добавить в словарь, например, для AssetClass
добавлено first
и для Multiplier
используется mean
:
df['DateTime'] = df['DateTime'].str.split(',').str[0]
wm = lambda x: np.average(x, weights=df.loc[x.index, "Quantity"])
f = {'Quantity': 'sum',
'Commission': 'sum',
'TradePrice':wm,
'AssetClass':'first',
'Multiplier':'mean', ....}
df2 = df.groupby(['Symbol', 'Buy/Sell']).agg(f).reset_index()
print (df2)
Symbol Buy/Sell Quantity Commission TradePrice AssetClass \
0 ADBE 200221C00385000 BUY 3 7.0 1.34 OPT
Multiplier
0 100