我正在嘗試為基于條件選擇的所有行的列分配值。實作這一目標的解決方案將在像這樣的幾個問題中討論。標準解決方案具有以下語法:
df.loc[row_mask, cols] = assigned_val
不幸的是,這個標準解決方案需要永遠。事實上,就我而言,我什至沒有完成一項任務。
更新:有關我的資料框的更多資訊:我的資料框中有大約 200 萬行,我正在嘗試為基于條件選擇的行更新資料框中一列的值。平均而言,約 10 行滿足選擇條件。
是否可以加快此分配操作?此外,對于大熊貓的多重分配,是否有任何一般指導方針。
uj5u.com熱心網友回復:
我相信.loc并且.at是您正在尋找的差異。.at根據這個答案,意味著更快。
uj5u.com熱心網友回復:
你可以試試 np.where 。
這是 np.where 的一個簡單示例
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
df['B'] = np.where(df['B']< 50, 100000, df['B'])
np.where() 如果條件失敗 則什么都不做還有另一個例子。
在你的情況下,它可能是
df[col] = np.where(df[col]==row_condition, assigned_val, df[col])
我在想它可能會快一點,因為它直接進入 numpy,而不是通過 pandas 進入底層的 numpy 機制。本文討論大資料集上的 Pandas 與 Numpy:https ://towardsdatascience.com/speed-testing-pandas-vs-numpy-ffbf80070ee7#:~:text = Numpy was faster than Pandas,exception of% 20simple arithmetic operations。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/313003.html
