Pracuję z dużym zestawem danych dla modelu uczenia maszynowego. Ponieważ zestaw danych jest ogromny, uruchomienie jednej z moich funkcji trwa zbyt długo. Czy istnieje funkcja pandy, która może zastąpić następujący kod:
df = pd.DataFrame({'Weight':[45, 88, 45, 88, 45, 88, 54, 45, 88],
'Name':['Sam', 'Sia', 'Sam', 'Sia', 'Sam', 'Sia', 'Ryan', 'Sam', 'Sia'],
'Age':[100, 95, 93, 90, 10, 95, 92, 110, 33]})
my_group = df.groupby(['Name'])
col_names = []
diff_range = 5
for pair in my_group:
for i in range(1, diff_range+1):
col_names.append(str(i))
difference_df[str(i)] = df['Age'].diff(i).shift(periods=-i)
difference_df['d_id_max'] = difference_df[col_names].idxmax(axis=1)
Powyższy kod najpierw pobiera każdą grupę, pobierając każdy wiersz mojej ramki danych i obliczając różnicę z tego wiersza kolumny „model_prediction” z następnymi 3 wierszami, a na końcu zwraca indeks wiersza, który ma maksymalną różnicę w stosunku do tego wiersza.
Weight Name Age
0 45 Sam 100
1 88 Sia 95
2 45 Sam 93
3 88 Sia 90
4 45 Sam 10
5 88 Sia 95
6 54 Ryan 92
7 45 Sam 110
8 88 Sia 33
Oczekiwany wynik:
Weight Name Age 1 2 3 4 5 d_id_max
0 45 Sam 100 -5.0 -7.0 -10.0 -90.0 -5.0 1
1 88 Sia 95 -2.0 -5.0 -85.0 0.0 -3.0 4
2 45 Sam 93 -3.0 -83.0 2.0 -1.0 17.0 5
3 88 Sia 90 -80.0 5.0 2.0 20.0 -57.0 4
4 45 Sam 10 85.0 82.0 100.0 23.0 NaN 3
5 88 Sia 95 -3.0 15.0 -62.0 NaN NaN 2
6 54 Ryan 92 18.0 -59.0 NaN NaN NaN 1
7 45 Sam 110 -77.0 NaN NaN NaN NaN 1
8 88 Sia 33 NaN NaN NaN NaN NaN NaN
1 odpowiedź
Użyj df.shift()
aby obliczyć różnicę między wierszami, a następnie użyj df.idxmax()
, aby uzyskać kolumnę z maksymalną wartością.
for i in range(1,6):
df[i] = df['Age'].shift(-i) - df['Age']
df["d_id_max"] = df[[1,2,3,4,5]].idxmax(axis=1)
print(df)
Wynik:
Weight Name Age 1 2 3 4 5 d_id_max
0 45 Sam 100 -5.0 -7.0 -10.0 -90.0 -5.0 1
1 88 Sia 95 -2.0 -5.0 -85.0 0.0 -3.0 4
2 45 Sam 93 -3.0 -83.0 2.0 -1.0 17.0 5
3 88 Sia 90 -80.0 5.0 2.0 20.0 -57.0 4
4 45 Sam 10 85.0 82.0 100.0 23.0 NaN 3
5 88 Sia 95 -3.0 15.0 -62.0 NaN NaN 2
6 54 Ryan 92 18.0 -59.0 NaN NaN NaN 1
7 45 Sam 110 -77.0 NaN NaN NaN NaN 1
8 88 Sia 33 NaN NaN NaN NaN NaN NaN
Podobne 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.