Python Pandas - трехмерная совокупность данных на основе критериев в нескольких столбцах, пока не будет достигнуто значение

Что я сделал:

вернуться к клиентам:

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== 
0
задан Fozoro 19 March 2019 в 11:20
поделиться

1 ответ

Вот пользовательская функция, которая делает это, просто подключите переменные, как в примере.

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)]
0
ответ дан Josh Friedlander 19 March 2019 в 11:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: