열 이름과 행 인덱스를 사용하여 pandas 데이터 프레임에서 값을 선택하는 가장 효율적인 방법은 무엇입니까?
행을 반복해야하는 경우가 있습니다.
작업 솔루션이 있습니다.
i = 0
while i < len(dataset) -1:
if dataset.target[i] == 1:
dataset.sum_lost[i] = dataset['to_be_repaid_principal'][i] + dataset['to_be_repaid_interest'][i]
dataset.ratio_lost[i] = dataset.sum_lost[i] / dataset['expected_returned_sum'][i]
else:
dataset.sum_lost[i] = 0
dataset.ratio_lost[i]= 0
i += 1
그러나이 솔루션은 RAM이 너무 많이 필요합니다. 또한 다음 경고가 표시됩니다.
"값이 DataFrame의 조각 복사본에 설정하려고합니다."
그래서 나는 다른 것을 생각해 내려고 노력하고 있습니다.
i = 0
while i < len(dataset) -1:
if dataset.iloc[i, :].loc['target'] == 1:
dataset.iloc[i, :].loc['sum_lost'] = dataset.iloc[i, :].loc['to_be_repaid_principal'] + dataset.iloc[i, :].loc['to_be_repaid_interest']
dataset.iloc[i, :].loc['ratio_lost'] = dataset.iloc[i, :].loc['sum_lost'] / dataset.iloc[i, :].loc['expected_returned_sum']
else:
dataset.iloc[i, :].loc['sum_lost'] = 0
dataset.iloc[i, :].loc['ratio_lost'] = 0
i += 1
하지만 작동하지 않습니다. 이것은 실제로 몇 명의 사용자가 동시에 사용할 수있는 웹 앱이기 때문에 더 빠르고 / 더 적은 램 배고픈 솔루션을 찾고 싶습니다.
감사합니다.
"행 반복"에 대해 생각하고 있다면 판다를 올바르게 사용하지 않는 것입니다. 대신 열 용어를 생각해야합니다.
np.where
벡터화 된 사용 (읽기 : 빠름) :
cond = dataset['target'] == 1
dataset['sumlost'] = np.where(cond, dataset['to_be_repaid_principal'] + dataset['to_be_repaid_interest'], 0)
dataset['ratio_lost'] = np.where(cond, dataset['sumlost'] / dataset['expected_returned_sum'], 0)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다