Mam zbiór danych, w którym mam 5 kolumn i wiele wierszy.
Musisz pomnożyć wartości na podstawie stanu
Uderzyła mnie logika, aby to wykonać, ze względu na operacje matematyczne do wykonania.
Wszystkie podane przykłady miały na celu utworzenie nowych kolumn na podstawie zestawu warunków, ale wymaga to modyfikacji w istniejącej kolumnie.
Pomoc będzie bardzo mile widziane.
1 odpowiedź
Oto działające rozwiązanie:
import pandas as pd
df = pd.DataFrame(
[
['Liquid', 1, 2, 21, 22],
['Liquid', 23, 24, 5, 6],
['Gas/Vapour', 27, 28, 7, 8],
['Gas', 9, 10, 11, 12]
], columns = ['col1', 'col2', 'col3', 'col4', 'col5'])
liquid_row_indices = df[df['col1'] == 'Liquid'].index.tolist()
gas_vapour__row_indices = df[df['col1'] == 'Gas/Vapour'].index.tolist()
df.iloc[liquid_row_indices, 1:] = df.iloc[liquid_row_indices, 1:].applymap(
lambda x: x*1000 if x<20 else x)
df.iloc[gas_vapour__row_indices, 1:] = df.iloc[gas_vapour__row_indices, 1:].applymap(
lambda x: x*1.024 if x<20 else x)
Wynik będzie:
col1 col2 col3 col4 col5
0 Liquid 1000 2000 21.000 22.000
1 Liquid 23 24 5000.000 6000.000
2 Gas/Vapour 27 28 7.168 8.192
3 Gas 9 10 11.000 12.000
Podsumowując logikę:
1) Przechowujemy numery wierszy, w których stan jest równy „Fluid” i „Gas / Vapor”
2) Następnie dla tych wierszy w ramce danych, dla wszystkich kolumn (z wyjątkiem pierwszej), applymap
wykonujemy funkcję lambda i zastępujemy oryginalną wartość wartością zwróconą przez funkcję lambda.
3) Funkcja lambda sprawdzi, czy wartość jest <20, jeśli tak, pomnoży tę wartość przez 1000 (dla stanu płynnego) lub przez 1,024 (dla stanu gaz / para), jeśli nie, to zwróci tę samą wartość, co oryginał .
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.
&
zamiastand
. Pierwszy z nich wykonuje bitowe AND, które nie wydaje się być tym, czego chcesz tutaj. Sugerowałbym również wyjęcie obliczenia indeksu z[ ]
i umieszczenie go w zmiennej, aby zapewnić czytelność i możliwość walidacji.