如何比较Python Pandas中多个列中第一个列表项中的值?

How to compare values in the first-positioned list item across multiple columns in Python Pandas?

这是数据

ID          VAR1            VAR2            VAR3
1           [12, 'a', 'ok'] [4, 'b', 'duk'] NaN
2           NaN             NaN             NaN
3           [1, 'f', 'sd']  NaN             [34, 'daa']

我想创建一个名为 MIN_VALUE 的新变量来比较所有三个变量的第一个列表项,并提取最低值。这将给出以下内容

ID          VAR1            VAR2            VAR3            MIN_VALUE
1           [12, 'a', 'ok'] [4, 'b', 'duk'] NaN             4
2           NaN             NaN             NaN             NaN
3           [1, 'f', 'sd']  NaN             [34, 'daa']     1

我尝试创建并应用如下函数,我希望它能够灵活地选择要选择的变量数量(因此使用 *args)。但它不能正常工作

def extract_min_value_from_first_list_item_across_multiple_columns(df, *args):
    return min(df[args][0])

df['MIN_VALUE'] = df.apply(
    extract_min_value_from_first_list_item_across_multiple_columns, 'VAR1', 'VAR2', 'VAR3', axis=1)

结果错误为 TypeError: apply() got multiple values for argument 'axis'

df["MIN_VALUE"] = df.loc[:, "VAR1":].apply(
    lambda x: min((v[0] for v in x[x.notna()]), default=np.nan), axis=1
)
print(df)

打印:

   ID         VAR1         VAR2       VAR3  MIN_VALUE
0   1  [12, a, ok]  [4, b, duk]        NaN        4.0
1   2          NaN          NaN        NaN        NaN
2   3   [1, f, sd]          NaN  [34, daa]        1.0