當我以特別的方式探索資料時,我經常有這樣的代碼:
X = (adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1)
print(X[X > 0])
有沒有辦法以簡單的方式在一行中做到這一點?以下作業但很冗長:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1)[(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1) > 0]
我想要這樣的東西:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1)[self > 0]
請注意,這不是生產代碼。它是臨時探索的一部分,其中迭代速度對結果很重要,這就是為什么我希望能夠在一行中完成這個常見的事情。
uj5u.com熱心網友回復:
您可以使用pipe:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1).pipe(lambda x: x[x>0])
uj5u.com熱心網友回復:
您可以傳遞一個 lambda 函式,該函式將資料幀作為引數并回傳一個掩碼以進行過濾.loc:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1).loc[lambda x:x>0]
uj5u.com熱心網友回復:
您可以嘗試Python 3.8 中引入的海象運算子
# Thanks for richardec pointing out list symbol [] is not necessary here
df, res = [(x := (adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1)), x[x>0]]
# or
res = (x := (adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1))[x>0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/470242.html
標籤:Python python-3.x 熊猫 筛选 系列
上一篇:如何在類中的變數上轉換字串?
