다음과 같은 형식의 데이터 프레임이 있습니다.
2021 2022 2023
0 3 7 7
1 1 4 4
2 0 1 5
3 4 5 7
이제 각 행에서 마지막 열 (2023)을 기준으로 계산 된 누적 백분율을 찾고 싶습니다.
2021 2022 2023
0 42.86 100.00 100.0
1 25.00 100.00 100.0
2 0.00 20.00 100.0
3 57.14 71.43 100.0
나는 오전 사용하여 원하는 출력을 얻을 수 :
data = []
colnames= list(df.columns)
for row in df.iterrows():
data.append([elem/row[1][-1]*100 for elem in row][1].values)
df_acc = pd.DataFrame(data)
df_acc.columns = colnames
그러나 이것은 끔찍하게 비효율적으로 보이며 모든 행을 반복하는 단계를 거쳐야하며 목록 이해력을 사용하여를 사용하여 백분율을 찾은 [elem/row[1][-1]*100 for elem in row][1].values
다음 새 데이터 프레임을 만들어야합니다.
누구든지 더 나은 접근 방법을 알고 있습니까? 아마도 사용하는 것조차 inplace=True
?
import pandas as pd
import numpy as np
# data
np.random.seed(1)
start = 2021
ncols = 3
nrows = 4
cols = [str(i) for i in np.arange(start, start+ncols)]
df = pd.DataFrame(np.random.randint(0,5, (nrows,ncols)), columns = cols).cumsum(axis = 1)
data = []
colnames= list(df.columns)
for row in df.iterrows():
data.append([round(elem/row[1][-1]*100, 2) for elem in row][1].values)
# data.append([elem/row[1][-1]*100 for elem in row][1].values)
df_acc = pd.DataFrame(data)
df_acc.columns = colnames
df_acc
당신이 할 수있는 df.div
LAST_COLUMN에 의해, 다음 mul
tiply에 의해 100
및 round
2
포인트 진수 :
>>> df.div(df.iloc[:,-1], axis=0).mul(100).round(2)
2021 2022 2023
0 42.86 100.00 100.0
1 25.00 100.00 100.0
2 0.00 20.00 100.0
3 57.14 71.43 100.0
max
각 열의 값을 기준으로 백분율을 원하는 경우 :
>>> df.div(df.max(1), axis=0).mul(100).round(2)
2021 2022 2023
0 42.86 100.00 100.0
1 25.00 100.00 100.0
2 0.00 20.00 100.0
3 57.14 71.43 100.0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다