【发布时间】:2023-01-20 01:40:50
【问题描述】:
生成示例数据框
import random
import string
import numpy as np
df = pd.DataFrame(
columns=[random.choice(string.ascii_uppercase) for i in range(5)],
data=np.random.rand(10,5))
df
V O C X E
0 0.060255 0.341051 0.288854 0.740567 0.236282
1 0.933778 0.393021 0.547383 0.469255 0.053089
2 0.994518 0.156547 0.917894 0.070152 0.201373
3 0.077694 0.685540 0.865004 0.830740 0.605135
4 0.760294 0.838441 0.905885 0.146982 0.157439
5 0.116676 0.340967 0.400340 0.293894 0.220995
6 0.632182 0.663218 0.479900 0.931314 0.003180
7 0.726736 0.276703 0.057806 0.624106 0.719631
8 0.677492 0.200079 0.374410 0.962232 0.915361
9 0.061653 0.984166 0.959516 0.261374 0.361677
现在我想使用第一列中的值过滤数据框,但由于我大量使用链接(例如df.T.replace(0, np.nan).pipe(np.log2).mean(axis=1).fillna(0).pipe(func)),我需要一个更紧凑的操作符号。通常你会做类似的事情
df[df.iloc[:, 0] < 0.5]
V O C X E
0 0.060255 0.341051 0.288854 0.740567 0.236282
3 0.077694 0.685540 0.865004 0.830740 0.605135
5 0.116676 0.340967 0.400340 0.293894 0.220995
9 0.061653 0.984166 0.959516 0.261374 0.361677
但是笨拙的冗余语法对于链接来说是可怕的。我想用 .query() 替换它,通常你会使用像 df.query('V < 0.5') 这样的列名,但在这里我希望能够通过列索引号而不是名称来查询表。所以在这个例子中,我故意随机化了列名。我也不能在 df.query('@df[0] < 0.5') 之类的查询中使用表名,因为在长链中,中间结果没有名称。
我希望有一些语法,例如 df.query('_[0] < 0.05'),我可以在其中将源表引用为某个符号 _。
【问题讨论】:
-
df.query(f"{df.columns[0]}<0.5")呢?