Mam mały problem z Pythonem, który próbuję rozwiązać;
Więc mam ramkę danych w tym formacie;
date, product, store, sales_amt
1/1/2019, A, A, 200
1/1/2019,A,B,120
1/2/2019, A, A, 75
1/3/2019,A,A,69
1/3/2019,A,B,23
----
----
----
1/31/2019,A,B,49
Mam scenariusz, w którym mam ramkę danych zawierającą 4 kolumny (data, produkt, sklep i sales_amt)
Daty mają obejmować cały miesiąc (np. w tym przypadku styczeń 2019 r.), ale w ramce danych brakuje niektórych dni.
Czy ktoś ma jakieś wskazówki dotyczące kodu w Pythonie, które mogą zapętlać daty dla określonego miesiąca i dodawać nowy wiersz do ramki danych z brakującą datą, kombinacją produktu / sklepu i wartością sales_amt równą zero?
Na przykład nie ma wpisu dla kombinacji produkt / sklep A / B w dniu 1 lutego 2019
Ostatnim celem jest posiadanie wpisu na każdy dzień tego miesiąca dla każdej kombinacji produktu / sklepu.
Jak najlepiej mogę to zrobić? Wygląda na coś do ponownego próbkowania, ale nie jestem pewien.
Wszelkie pomysły, jak to zrobić, będą naprawdę mile widziane.
Dzięki
1 odpowiedź
Jednym ze sposobów jest utworzenie ramki danych ze wszystkimi niezbędnymi kombinacjami wierszy, a następnie użycie merge
z częściowo wypełnioną ramką danych.
# initialize a dataframe with all the rows, with 0 values
dates = pd.date_range('01-01-2019', '01-31-2019')
products = ['a','b']
stores = ['a','b']
df_default = pd.DataFrame(list(itertools.product(dates, products, stores)))
#changing to string type so can join with second dataframe easier
df_default[0] = df_default.astype(str)
df_default[3] = 0
print(df_default)
0 1 2 3
0 2019-01-01 a a 0
1 2019-01-01 a b 0
2 2019-01-01 b a 0
3 2019-01-01 b b 0
4 2019-01-02 a a 0
# make a partially filled dataframe
df = pd.DataFrame([('2019-01-01', 'a','a', 1),
('2019-01-01', 'b', 'a',2)])
# use merge to get the values of df into df_default
print(pd.merge(df_default,s, how='left', on=[0,1,2]).drop('3_x',axis=1).fillna(0).head(5))
0 1 2 3_y
0 2019-01-01 a a 1.0
1 2019-01-01 a b 0.0
2 2019-01-01 b a 2.0
3 2019-01-01 b b 0.0
4 2019-01-02 a a 0.0
Mam nadzieję, że to pomoże
Podobne pytania
Powiązane pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.