如何在 pandas 子集中引用自己
How to refer to self in pandas subsetting
当我以临时方式探索数据时,我经常会遇到这样的代码:
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]
请注意,这不是生产代码。这是临时探索的一部分,其中迭代速度对结果很重要,这就是为什么我希望能够在一行中完成这个常见的事情。
您可以使用 pipe
:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1).pipe(lambda x: x[x>0])
.loc
的众多用途之一就是这个。您可以向它传递一个 lambda 函数,该函数将数据框作为参数,return 一个掩码作为过滤依据:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1).loc[lambda x:x>0]
你可以尝试 walrus operator 在 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]
当我以临时方式探索数据时,我经常会遇到这样的代码:
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]
请注意,这不是生产代码。这是临时探索的一部分,其中迭代速度对结果很重要,这就是为什么我希望能够在一行中完成这个常见的事情。
您可以使用 pipe
:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1).pipe(lambda x: x[x>0])
.loc
的众多用途之一就是这个。您可以向它传递一个 lambda 函数,该函数将数据框作为参数,return 一个掩码作为过滤依据:
(adj_all.o.diff(1) / adj_none.o.diff(1)).diff(1).loc[lambda x:x>0]
你可以尝试 walrus operator 在 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]