这是数据
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