Что я сделал:
вернуться к клиентам:
byte[] result = ****encrypted data****;
String str = Base64.encodeBase64String(result);
return str;
получать от клиентов:
byte[] bytes = Base64.decodeBase64(str);
ваши данные будут перенесены в этом формате :
OpfyN9paAouZ2Pw+gDgGsDWzjIphmaZbUyFx5oRIN1kkQ1tDbgoi84dRfklf1OZVdpAV7TonlTDHBOr93EXIEBoY1vuQnKXaG+CJyIfrCWbEENJ0gOVBr9W3OlFcGsZW5Cf9uirSmx/JLLxTrejZzbgq3lpToYc3vkyPy5Y/oFWYljy/3OcC/S458uZFOc/FfDqWGtT9pTUdxLDOwQ6EMe0oJBlMXm8J2tGnRja4F/aVHfQddha2nUMi6zlvAm8i9KnsWmQG//ok25EHDbrFBP2Ia/6Bx/SGS4skk/0couKwcPVXtTq8qpNh/aYK1mclg7TBKHfF+DHppwd30VULpA==
Вот пользовательская функция, которая делает это, просто подключите переменные, как в примере.
def weighted_average(df, dates, price_limit, stop_sum):
# filter multiindex for your dates, plus price_limits
tmp = df.loc[dates].loc[df['Price'] <= price_limit]
# find index of halting cumsum condition, take tmp until there
tmp = tmp.loc[:(tmp['Qty'].cumsum() > stop_sum).idxmax()]
# update last value
tmp.iat[-1, df.columns.get_loc('Qty')] -= tmp['Qty']sum() - stop_sum
# return the weighted average
return tmp.product(axis=1).sum() / stop_sum
dates = [0, 1]
price_limit = 25
stop_sum = 20
weighted_average(df, dates, price_limit, stop_sum)
> 22.5
Альтернативой фильтра (tmp = df.loc[dates].loc[df['Price'] <= price_limit]
) (возможно, более производительной для большого набора данных) является
tmp = df[(df.index.get_level_values(0).isin(dates)) & (df['Price'] <= price_limit)]