Вариант с использованием функции генератора (который я считаю более pythonic):
def recvall(sock, buffer_size=4096):
buf = sock.recv(buffer_size)
while buf:
yield buf
if len(buf) < buffer_size: break
buf = sock.recv(buffer_size)
# ...
with socket.create_connection((host, port)) as sock:
sock.sendall(command)
response = b''.join(recvall(sock))
Вот решение с пакетом tidyverse
. Обратите внимание, что здесь петли не нужны:
library(tidyverse)
df %>% as_tibble %>% group_by(Date, Company) %>%
summarise(x = mean(VolumeSEK)) %>%
ungroup() %>%
spread(Company, x)
# A tibble: 5 x 7
Date `Alfa Laval` Investor Kinnevik SEB Skanska Swedbank
<fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 11.09.2018 22246. 31687. 76522. 48348. NA 49560.
2 12.09.2018 30550 119912. 9017.9 52926. 60478. NA
3 13.09.2018 NA NA 29150 1254.0 NA 161560.
4 14.09.2018 NA 89315. 11943. NA NA 149519.
5 17.09.2018 NA NA 65490. 35451. 11523. 8512
Подход data.table, приведенный к широкоформатному формату
library(data.table)
dcast( setDT(df)[ Company %in% Comp & Date %in% Day, ][, list( mean = mean(VolumeSEK)), by = .(Company, Date)], Company ~ Date )
# Company 11.09.2018 12.09.2018 13.09.2018 14.09.2018 17.09.2018
# 1: Alfa Laval 22245.50 30550.00 NA NA NA
# 2: Investor 31687.49 119911.60 NA 89315.02 NA
# 3: Kinnevik 76522.20 9017.90 29150.00 11943.30 65490.40
# 4: SEB 48347.85 52926.21 1253.98 NA 35450.97
# 5: Skanska NA 60478.40 NA NA 11523.06
# 6: Swedbank 49560.15 NA 161560.30 149519.25 8512.00
, переключите Company ~ Date
в Date ~ Company
для приведения в обратном направлении (т. Е. Компании в столбцы).