我正在嘗試處理一個要求,如果它超過某個值,我必須將資料框中的值填充為 NaN。
s={'2018':[1,2,3,4],'2019':[2,3,4,5],'2020':[4,6,8,9],'2021':[11,12,34,42], 'qty':[45,22,12,42],'price':[22,33,44,55]}
p=pd.DataFrame(data=s)
k=(p.qty p.price) # Not sure if this is the right way as per the requirement.
條件是如果列 2018 或 19 或 20 或 21 的值大于 k,則將該值填充為 NaN。
假設 k=3,2018 年的第四行值為 4 將是 NaN。所有列的 k 值都不同,因此需要按列計算,因此值必須為 NaN。
我怎么能做到這一點?
uj5u.com熱心網友回復:
一旦你弄清楚 k = (p.qty p.price) 是什么,你就可以更新它。但是,我認為您要解決此問題的方法是逐列使用 gt() 運算子。這是我的解決方案。
import pandas as pd
s={'2018':[1,2,3,4],'2019':[2,3,4,5],'2020':[4,6,8,9],'2021': [11,12,34,42], 'qty':[1,2,3,4], 'price':[1,2,3,4]}
p=pd.DataFrame(data=s)
k = (p.qty * p.price)
needed = p[['qty', 'price']]
p = p.where(p.gt(k, axis=0), None)
p[['qty','price']] = needed
print(p)
這輸出:
2018 2019 2020 2021 qty price
0 NaN 2.0 4.0 11 1 1
1 NaN NaN 6.0 12 2 2
2 NaN NaN NaN 34 3 3
3 NaN NaN NaN 42 4 4
一些筆記。我保存并重新添加最后一列。但是,如果您不需要這些,您可以洗掉帶有所需單詞的行。包含大部分代碼的行是 p = p.where(p.gt(k, axis=0), None)。在這個當前示例中,我的比較是在列級別上進行的。因此,“2019”:2、3、4、5 與 k:1、4、9、16 進行比較。顯示 2 > 1,但 3,4,5 都小于 4,9,16,導致 True, False, False, False。DataFrame.where(cond, other) 用 None 替換 False 值,這是 python 的 null 標準。
uj5u.com熱心網友回復:
其實很簡單。您需要了解更多關于 pandas 資料幀中的邏輯陳述句的資訊。要解決您的問題,您可以嘗試以下代碼:
s={'2018':[1,2,3,4],'2019':[2,3,4,5],'2020':[4,6,8,9],'2021':[11,12,34,42], 'qty':[45,22,12,42],'price':[22,33,44,55]}
p=pd.DataFrame(data=s)
k = 4
p[p<k]
輸出
| 2018 | 2019 | 2020 | 2021 | 數量 | 價錢 | |
|---|---|---|---|---|---|---|
| 0 | 楠 | 楠 | 4 | 11 | 45 | 22 |
| 1 | 楠 | 楠 | 6 | 12 | 22 | 33 |
| 2 | 楠 | 4 | 8 | 34 | 12 | 44 |
| 3 | 4 | 5 | 9 | 42 | 42 | 55 |
請注意,這k = (p.qty p.price)將回傳一個 numpy 陣列,而不是一個標量值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/433033.html
下一篇:比較陣列中字串的長度?
