Altair - 使用第 n 列作为图中的输入变量

Altair - use nth column as input variable in graph

我想引用数据框的 nth 列,并将其用作使用 altair 绘制图形的输入。
代码如下所示:

#create dataframe
df = pd.DataFrame({'date': ['2020-04-03', '2020-04-04', '2020-04-05', '2020-04-06','2020-04-03', '2020-04-04','2020-04-05','2020-04-06'],
                    'ID': ['a','a','a','a','b','b','b','b'],'bar': [np.nan,8,np.nan,np.nan, np.nan, 8,np.nan,np.nan],
                    'line': [8,np.nan,10,8, 4, 5,6,7] })

#define columns to be used
bb = df.columns[2]
ll = df.columns[3]

#make graph
bars = alt.Chart(df).mark_bar(color="grey", size=5).encode(
         alt.X('monthdate(date):O'), alt.Y(bb))

lines = (alt.Chart(df).mark_line(point=True,size=2)
     .transform_filter('isValid(datum.line)')
     .encode(alt.X('monthdate(date):O'), y='line:Q'))

alt.layer(bars + lines,width=350,height=150).facet(facet=alt.Facet('ID:N'),
    ).resolve_axis(y='independent',x='independent')

我管理了图表的“条形”部分。但我不确定如何在内部执行此操作 transform_filter 函数。我不想指定列名“line”,而是使用“ll”或数据框的第 3 列。
有办法吗?感谢您的帮助

datum 正在引用一个 javascript 对象,并且 I don't believe there is any way to access javascript object properties (like line) by index rather than property name。但是,您可以使用 Python f-strings 构造字符串,它允许您在字符串中需要的地方替换变量值:

.transform_filter(f'isValid(datum.{ll})')

Altair (second example here) 中也有一个 expr 模块,但我想不出比上面更容易使用的方法。