Mam Pandas DataFrame, który wygląda podobnie do tego, ale z 10.000 wierszy i 500 kolumn.Pandas DataFrame: Jak natywnie uzyskać minimum w zakresie wierszy i kolumn
dla każdego wiersza, chciałbym znaleźć minimalną wartość pomiędzy 3 dni temu na 15:00, a dzisiaj o godzinie 13:30.
Czy jest jakiś rodzimy numpy sposób to zrobić szybko? Moim celem jest uzyskanie minimalnej wartości dla każdego wiersza, mówiąc coś w stylu "jaka jest wartość minimalna od 3 dni temu 15:00 do 0 dni temu (dzisiaj) 13:30?"
W tym konkretnym przykładzie odpowiedzi dla dwóch ostatnich rzędów byłoby:
2011-01-09 2481.22
2011-01-10 2481.22
Mój obecny sposób jest taki:
1. Get the earliest row (only the values after the start time)
2. Get the middle rows
3. Get the last row (only the values before the end time)
4. Concat (1), (2), and (3)
5. Get the minimum of (4)
Ale to trwa bardzo długo na dużej DataFrame
Następujący kod wygeneruje podobny DF:
import numpy
import pandas
import datetime
numpy.random.seed(0)
random_numbers = (numpy.random.rand(10, 8)*100 + 2000)
columns = [datetime.time(13,0) , datetime.time(13,30), datetime.time(14,0), datetime.time(14,30) , datetime.time(15,0), datetime.time(15,30) ,datetime.time(16,0), datetime.time(16,30)]
index = pandas.date_range('2011/1/1', '2011/1/10')
df = pandas.DataFrame(data = random_numbers, columns=columns, index = index).astype(int)
print df
Oto wersja json z dataframe:
„{ "13:00:00": { "1293840000000": 2085, "1293926400000": 2062, "1294012800000": 2035 "1294099200000": 2086, "1294185600000": 2006, "1294272000000": 2097, "1294358400000": 2078, "1294444800000": 2055, "1294531200000": 2023, "1294617600000": 2024}, "13:30:00 ": {" 1293840000000 ": 2045," 1293926400000 ": 2039," 1294012800000 ": 2035," 1294099200000 ": 2045," 1294185600000 ": 2025," 1294272000000 ": 2099," 1294358400000 ": 2028," 1294444800000 ": 2028 "1294531200000": 2034, "1294617600000": 2010}, "14:00:00": {"1293840000000": 2095, "1293926400000": 2006, "1294012800000": 2001, "1294099200000": 2032, "1294185600000" : 2022, "12 94272000000 ": 2040," 1294358400000 ": 2024," 1294444800000 ": 2070," 1294531200000 ": 2081," 1294617600000 ": 2095}," 14:30:00 ": {" 1293840000000 ": 2057," 1293926400000 ": 2042 "1294012800000": 2018, "1294099200000": 2023, "1294185600000": 2025, "1294272000000": 2016, "1294358400000": 2066, "1294444800000": 2041, "1294531200000": 2098, "1294617600000": 2023}, "15:00:00": {"1293840000000": 2082, "1293926400000": 2025, "1294012800000": 2040, "1294099200000": 2061, "1294185600000": 2013, "1294272000000": 2063, "1294358400000": 2024 "1294444800000": 2036, "1294531200000": 2096, "1294617600000": 2068}, "15:30:00": {"1293840000000": 2090, "1293926400000": 2084, "1294012800000": 2092, "1294099200000" : 2003, "1294185600000": 2001, "1294272000000": 2049, "1294358400000": 2066, "1294444800000": 2082, "1294531200000": 2090, "1294617600000": 2005}, "16:00:00": {" 1293840000000 ": 2081," 1293926400000 ": 2003," 1294012800000 ": 2009," 1294099200000 ": 2001," 1294185600000 ": 2011," 1294272000000 ": 2098," 1294358400000 ": 2051," 1294444800000 ": 2092," 1294531200000 " : 2029, "1294617600000": 2073}, "16: 3 0:00 ": {" 1293840000000 ": 2015," 1293926400000 ": 2095," 1294012800000 ": 2094," 1294099200000 ": 2042," 1294185600000 ": 2061," 1294272000000 ": 2006," 1294358400000 ": 2042," 1294444800000 ": 2004," 1294531200000 ": 2099," 1294617600000 ": 2088}} '
najpierw robi '' rolling_min'' uzyskać minimum dla każdej kolumny w ciągu ostatnich 3 wierszy, a następnie 'min' uzyskać minimum, że nowy wiersze, czego potrzebujesz? – joris
Skąd pochodzisz: "2011-01-10 2481.22"? Czy możesz wyjaśnić swoje oczekiwane wyniki w nieco bardziej szczegółowy sposób? – Divakar
Pewnie. Weź rząd 2011-01-10. Chcę zebrać wszystkie wartości sprzed 3 dni (3 wiersze temu) po godzinie 15:00 (2011-01-07 15:30 wartość, 2011-01-07 2011-01-07 16:00 wartość, 2011-01 -07 16:30 wartość) do dziś (2011-01-10) 13:30. Więc w zasadzie każda komórka między 2011-01-07 15:30 a dzisiaj 13:30. Po zebraniu tych wartości otrzymuję minimalną wartość pęczka. – user1367204