我想轉換 Pandas Dataframe 的值,以便將 3 個最小的列設定為零:
row1: 0.21, 0.11, 0.24, 0.52, 0.12
row2: 0.31, 0.01, 0.44, 0.52, 0.52
會成為:
row1: 0.0, 0.0, 0.24, 0.52, 0.0
row2: 0.0, 0.0. 0.0, 0.52, 0.52
我更愿意在沒有回圈的情況下執行此操作。
uj5u.com熱心網友回復:
我們可以在 上使用where 。with和將在行內建立排序,使得最小值為 1,最大值為 5(行的總長度)。然后我們用來替換秩小于 3 的所有值:rankaxis=1rankmethod='min'ascending=Falsewhere
df = df.where(df.rank(axis=1, method='min', ascending=False) < 3, 0)
我們還可以使用相反的條件 withmask來保留排名高于 3 的值,并將 3 或更低的值替換為 0:
df = df.mask(df.rank(axis=1, method='min', ascending=False) >= 3, 0)
任一選項都會產生df:
0 1 2 3 4
0 0.0 0.0 0.24 0.52 0.00
1 0.0 0.0 0.00 0.52 0.52
*注意取決于我們可能還想要的預期行為,method='dense'或者method='first'這將改變排名中處理重復值的方式。
設定:
import pandas as pd
df = pd.DataFrame({
0: [0.21, 0.31],
1: [0.11, 0.01],
2: [0.24, 0.44],
3: [0.52, 0.52],
4: [0.12, 0.52]
})
uj5u.com熱心網友回復:
你可以試試:
A - 使用 list(df["col"].unique()) 和 sort/sorted 來獲取前三個值。把它放在一個串列中。
B - 使用 df.loc 洗掉在這個新串列中具有值的行(類似于 df.loc[df["col"].isin(a)] )
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/358223.html
