pandas 有没有办法生成新的数据?

4nkexdtk  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(118)

我有这些数据。原始数据从第1列到第5列。
是否有任何方法可以通过随机组合列来创建新数据,而无需特定条件?
例如,我通过在列之间创建公式来创建新数据。我知道有一些方法可以用Python自己制作公式。但我想做大约100多个专栏。有没有什么自动的方法可以做到这一点?(Numpy,Pandas或类似的东西)

vsmadaxz

vsmadaxz1#

您可以使用一些内置模块,如randomoperator,其中包含一组数学函数。我使用这种方法生成了一些随机列,这些列是原始列的随机组合。请注意,用于每个操作的原始列数也是随机的,但如果愿意,可以将其设置为特定的数字。列名中的[]只是为了可视化,因为在某些情况下,列名可能看起来太近,难以阅读。在这段代码中,数学运算只使用原始列,如果你想使用新创建的列,你应该删除original_columns变量,并在循环中使用df.columns。还要考虑到,在这段代码中,所有的操作都是从左到右进行的,这意味着如果你看到A + B * C,顺序将是:

  1. 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)

输出:

A         B         C         D         E    [B / A * C]  [B / C * D + E]   [C - B]
0  0.133616  0.518619  0.681410  0.903823  0.971338     2.644830         1.659235  0.162791
1  0.968481  0.363165  0.274024  0.009211  0.821189     0.102755         0.833397 -0.089140
2  0.267062  0.197164  0.187881  0.862648  0.151512     0.138707         1.056784 -0.009283
3  0.460873  0.841071  0.150538  0.469626  0.424029     0.274725         3.047882 -0.690534
4  0.172947  0.602186  0.004098  0.937253  0.093663     0.014267       137.835107 -0.598088
5  0.015732  0.502398  0.380856  0.593829  0.725551    12.162291         1.508887 -0.121542
6  0.606476  0.854250  0.235426  0.306123  0.205574     0.331609         1.316350 -0.618825
7  0.220014  0.415449  0.418816  0.788880  0.001986     0.790843         0.784525  0.003366
8  0.479869  0.480209  0.587922  0.318358  0.116142     0.588339         0.376173  0.107713
9  0.927947  0.261066  0.225387  0.910492  0.268781     0.063410         1.323409 -0.035680

相关问题