如何比较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
这是数据
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