열 이름과 행 인덱스를 사용하여 Pandas 데이터 프레임에서 값을 선택하는 올바른 방법은 무엇입니까?

도미닉 노보트니

열 이름과 행 인덱스를 사용하여 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관