簡體   English   中英

使用列名和行索引從 pandas dataframe 中選擇值的正確方法是什么?

[英]What is the correct way of selecting value from pandas dataframe using column name and row index?

使用列名和行索引(我的意思是行號)從 pandas dataframe 中選擇值的最有效方法是什么?

我有一個必須遍歷行的情況:

我有一個可行的解決方案:

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   

但是這個解決方案非常需要內存。 我還收到以下警告:

“試圖在 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

但它不起作用。 我想提出一個更快/更少內存消耗的解決方案,因為這實際上是 web 應用程序,一些用戶可以同時使用。

非常感謝。

如果您正在考慮“循環遍歷行”,那么您沒有正確使用 pandas。 您應該考慮列的術語。

使用矢量化的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM