您可以使用一些内置模块,如random和operator,其中包含一组数学函数。我使用这种方法生成了一些随机列,这些列是原始列的随机组合。请注意,用于每个操作的原始列数也是随机的,但如果愿意,可以将其设置为特定的数字。列名中的[]只是为了可视化,因为在某些情况下,列名可能看起来太近,难以阅读。在这段代码中,数学运算只使用原始列,如果你想使用新创建的列,你应该删除original_columns变量,并在循环中使用df.columns。还要考虑到,在这段代码中,所有的操作都是从左到右进行的,这意味着如果你看到A + B * C,顺序将是:
A + B 1.(A+B)* C
NUM_OF_COLUMNS = 3
data = np.random.rand(10, 5)
df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D', 'E'])
operations = [operator.add, operator.sub, operator.mul, operator.truediv]
operations_dict = {'add':'+','sub':'-','mul':'*','truediv':'/'}
original_columns = df.columns
for _ in range(NUM_OF_COLUMNS):
num_operators = random.randint(2,5)
selected_columns = random.sample(list(original_columns), num_operators)
selected_operations = [random.choice(operations) for _ in range(num_operators-1)]
new_column = df[selected_columns[0]]
column_name = f"[{selected_columns[0]}"
for i in range(1, len(selected_columns)):
new_column = selected_operations[i-1](new_column, df[selected_columns[i]])
column_name += f" {operations_dict[selected_operations[i-1].__name__]} {selected_columns[i]}"
column_name += "]"
df[column_name] = new_column
print(df)
1条答案
按热度按时间vsmadaxz1#
您可以使用一些内置模块,如
random
和operator
,其中包含一组数学函数。我使用这种方法生成了一些随机列,这些列是原始列的随机组合。请注意,用于每个操作的原始列数也是随机的,但如果愿意,可以将其设置为特定的数字。列名中的[
]
只是为了可视化,因为在某些情况下,列名可能看起来太近,难以阅读。在这段代码中,数学运算只使用原始列,如果你想使用新创建的列,你应该删除original_columns
变量,并在循环中使用df.columns
。还要考虑到,在这段代码中,所有的操作都是从左到右进行的,这意味着如果你看到A + B * C,顺序将是:1.(A+B)* C
输出: