如何在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

最新更新