我有一個資料框(一個非常大的),如下所示:
| ID | 類號 | 一個_1 | a2 | a_3 | a_4 |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 | 1 |
| 2 | 1 | 1 | 1 | 1 | 1 |
| 3 | 1 | 1 | 0 | 2 | 1 |
| 4 | 1 | 1 | 2 | 0 | 3 |
為了完整起見,這里是一個包含此資料框較大切口的螢屏截圖:

我們如何將列中的所有值(所有值1)替換為除,和之外的隨機值?a_1a_1000012
到目前為止我嘗試過的作業但似乎并不優雅:
cols = ["a_" str(i) for i in range(1, 1000 1)]
for col in cols:
df[col] = df[col].apply(lambda x: random.choice(range(3, 20)) if x == 1 else x)
df.head()
如果有任何提示以更直接的方式實作這一點,我將不勝感激。注意df[cols].apply(...)不起作用,因為它會產生錯誤“ValueError:系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 。”
uj5u.com熱心網友回復:
IIUC,您可以使用:
cols = df.filter(like='a_').columns
df[cols] = df.mask(df[cols].eq(1),
np.random.randint(3,1000,(df.shape[0], len(cols))))
可重現的例子:
np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 10, (10,10)),
columns=[f'a_{i 1}' for i in range(10)])
輸出:
a_1 a_2 a_3 a_4 a_5 a_6 a_7 a_8 a_9 a_10
0 5 0 3 3 7 9 3 5 2 4
1 7 6 8 8 957 6 7 7 8 380
2 5 9 8 9 4 3 0 3 5 0
3 2 3 8 785 3 3 3 7 0 89
4 9 9 0 4 7 3 2 7 2 0
5 0 4 5 5 6 8 4 592 4 9
6 8 773 518 7 9 9 3 6 7 2
7 0 3 5 9 4 4 6 4 4 3
8 4 4 8 4 3 7 5 5 0 846
9 5 9 3 0 5 0 28 2 4 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/493420.html
下一篇:如何在條形圖上減少條形?
