Python 如何使用具有不同输入参数的相同函数在dataframe中创建新列?
我有一个示例数据帧:Python 如何使用具有不同输入参数的相同函数在dataframe中创建新列?,python,pandas,function,dataframe,Python,Pandas,Function,Dataframe,我有一个示例数据帧: x_mean x_min x_max y_mean y_min y_max 1 85.6 3 264 75.7 3 240 2 105.5 6 243 76.4 3 191 3 95.8 19 287 48.4 8
x_mean x_min x_max y_mean y_min y_max
1 85.6 3 264 75.7 3 240
2 105.5 6 243 76.4 3 191
3 95.8 19 287 48.4 8 134
4 85.5 50 166 64.8 32 103
5 55.9 24 117 46.7 19 77
x_range = [list(range(0,50)),list(range(51,100)),list(range(101,250)),list(range(251,350)),list(range(351,430)),list(range(431,1000))]
y_range = [list(range(0,30)),list(range(31,60)),list(range(61,90)),list(range(91,120)),list(range(121,250)),list(range(251,2000))]
#here x = Any column with mean value (eg. x_mean or y_mean)
# y = x_range / y_range
def min_max_range(x,y):
for a in y:
if int(x) in a:
min_val = min(a)
max_val = max(a)+1
return max_val - min_val
def min_range(x,y):
for a in y:
if int(x) in a:
min_val = min(a)
return min_val
现在,我想将这些函数min\u max\u range()
和min\u range()
应用于列x\u-mean,y\u-mean
,以获得新列
与函数min\u max\u val
使用列x\u mean
和范围x\u range
作为创建列x\u min\u max\u val
的输入一样,类似地,列y\u mean
,范围y\u range
用于列y\u max\u val
:
通过使用这些一行程序,我可以一列一列地创建每一列,但我想用一行程序一次性将其应用于两列x_-mean&y_-mean
列
df['x_min_max_val'] = df['x_mean'].apply(lambda x: min_max_range(x,x_range))
df['y_min_max_val'] = df['y_mean'].apply(lambda x: min_max_range(x,y_range))
生成的数据帧应如下所示:
x_mean x_min x_max y_mean y_min y_max x_min_max_val y_min_max_val x_min_val y_min_val
1 85.6 3 264 75.7 3 240 49 29 51 61
2 105.5 6 243 76.4 3 191 149 29 101 91
3 95.8 19 287 48.4 8 134 49 29 51 91
4 85.5 50 166 64.8 32 103 49 29 51 61
5 55.9 24 117 46.7 19 77 49 29 51 31
我想一次性创建这些列,而不是一次性创建一列。我该怎么做?有什么建议吗?或者像这样的东西能起作用
df.filter(regex='mean').apply(lambda x: min_max_range(x,x+'_range'))
这是实现这一目标需要遵循的概念。首先,您需要将范围存储在字典中,以便通过名称访问它们
range_dict = {}
range_dict['x_range'] = x_range
range_dict['y_range'] = y_range
此外,还需要在列表中包含需要进行计算的列(或者,如果这些列具有特定模式,则可以使用正则表达式获取这些列)
现在,要在所有列上应用函数,需要定义如下函数
def min_max_calculator(df, range_dictionary, mean_columns_list):
for i in range(len(mean_cols_list)):
# this returns 'x_mean'
current_column = mean_cols_list[i]
# this returns 'x_min_max_value'
output_col_name = current_column.replace('mean','min_max_value')
# this returns 'x_range'
range_name = current_column.replace('mean','range')
# this returns the list of ranges for x_range
range_list = range_dict[range_name]
# This add the calculated column to the dataframe
df[output_col_name] = df[current_column].apply(lambda x: min_max_range(x,range_list))
return(df)
df_output = min_max_calculator(df, range_dict, mean_cols_list)
这些是您正在使用的函数,还是仅仅是示例?我正在使用它们@Datanovice@astroluv很难理解你在追求什么。因此,您希望函数min_max_range获取输入x_mean和x_range并输出指定的列?当前,
min_max_range
将返回None,因为y_mean
中没有值在x_mean
中?此外,传入列也会导致错误。另外,您目前如何做到这一点,以及您希望如何“一次性”完成?我如何添加另一列以使用其他列获取新列。x_new=df.x_min_max_val/(df.x_max-df.x_min)*(df.x_mean-df.x_min)+df.x_min_max_val
def min_max_calculator(df, range_dictionary, mean_columns_list):
for i in range(len(mean_cols_list)):
# this returns 'x_mean'
current_column = mean_cols_list[i]
# this returns 'x_min_max_value'
output_col_name = current_column.replace('mean','min_max_value')
# this returns 'x_range'
range_name = current_column.replace('mean','range')
# this returns the list of ranges for x_range
range_list = range_dict[range_name]
# This add the calculated column to the dataframe
df[output_col_name] = df[current_column].apply(lambda x: min_max_range(x,range_list))
return(df)
df_output = min_max_calculator(df, range_dict, mean_cols_list)