我有一個包含四列的資料框,其值在 0-100 之間。在新列中,我想根據前四列中的值分配一個值。
前四列的值將被分配一個數字 0、1 或 2,然后相加如下:
0 - 30 = 0
31 -70 = 1
71 - 100 = 2
因此,第五列中的最大數字將為 8,最小數字為 0。
在第五列下方的示例資料框中,結果應該是 2、3。(以防萬一我沒有清楚地描述這一點。)
我對 python 還是很陌生,在這個階段,我的弓中唯一的字串是一個非常長且繁瑣的多重嵌套 if 陳述句,后跟df['E'] = df.apply().
我的問題是填充第五列的最佳和最有效的函式/方法是什么。
data = {
'A': [50, 90],
'B': [2, 4],
'C': [20, 80],
'D': [75, 72],
}
df = pd.DataFrame(data)
uj5u.com熱心網友回復:
編輯
一種更全面的方法np.select:
condlist = [(0 <= df) & (df <= 30),
(31 <= df) & (df <= 70),
(71 <= df) & (df <= 100)]
choicelist = [0, 1, 2]
df['E'] = np.select(condlist, choicelist).sum(axis=1)
print(df)
# Output
A B C D E
0 50 2 20 75 3
1 90 4 80 72 6
使用pd.cut后匯整資料幀與一列melt:
df['E'] = pd.cut(pd.melt(df, ignore_index=False)['value'],
bins=[0, 30, 70, 100], labels=[0, 1, 2]) \
.cat.codes.groupby(level=0).sum()
print(df)
# Output:
A B C D E
0 50 2 20 75 3
1 90 4 80 72 6
細節:
>>> pd.melt(df, ignore_index=False)
variable value
0 A 50
1 A 90
0 B 2
1 B 4
0 C 20
1 C 80
0 D 75
1 D 72
>>> pd.cut(pd.melt(df, ignore_index=False)['value'],
bins=[0, 30, 70, 100], labels=[0, 1, 2])
0 1
1 2
0 0
1 0
0 0
1 2
0 2
1 2
Name: value, dtype: category
Categories (3, int64): [0 < 1 < 2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364699.html
