我有一個pandas DataFrame,每列代表一個季度,最近的季度放在右邊,不是所有的資訊都同時得到,有些列可能缺少資訊
我想在 DataFrame 的末尾添加另一個名為 Criteria 的列:
- 如果具有可用資料的最近 3 個季度的值均大于 10,則 Criteria = Y(這意味著在應用條件時忽略 NaN)
- 否則 N
在下面的示例中,B、D 和 E 將等于 Y,其余的將標記為 N
但我找不到動態應用標準以忽略 NaN 值的方法
import pandas as pd
import numpy as np
list_of_tuples = [
(11, 34, 78, 5, -11, -56),
(12, np.NaN, 98, 7, np.NaN, 18),
(21, 56, -78, -23, 64, 28),
(56, -98, 35, 63, 27, np.NaN),
(13, 34, -11, 11, 56, 10),
(12, 41, 12, 41, -78, -18),
]
df = pd.DataFrame(
list_of_tuples,
index=['A', 'B', 'C', 'D', 'E', 'F'],
columns=['2020Q4', '2021Q1', '2021Q2', '2021Q3', '2021Q4', '2022Q1'],
)
print(df)
任何幫助將不勝感激,謝謝
uj5u.com熱心網友回復:
IIUC,您可以stack使用自定義groupby函式:
df['Criteria'] = np.where(df.stack().groupby(level=0)
.apply(lambda s: s.tail(3).ge(10).all()),
'Y', 'N')
注意。B 是“N”,因為 2021Q3 < 10
輸出:
2020Q4 2021Q1 2021Q2 2021Q3 2021Q4 2022Q1 Criteria
A 11 34.0 78 5 -11.0 -56.0 N
B 12 NaN 98 7 NaN 18.0 N
C 21 56.0 -78 -23 64.0 28.0 N
D 56 -98.0 35 63 27.0 NaN Y
E 13 34.0 -11 11 56.0 10.0 Y
F 12 41.0 12 41 -78.0 -18.0 N
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/458763.html
