itertools:获取操作(+-* /)和列的组合

哈里斯

给定一个数值的数据框,我想对所有列组合执行加,减,乘和除运算。

对于3以上的组合,最快的方法是什么?

下面给出了一个最小的可重现示例(组合为2)。

import numpy as np
import pandas as pd
from itertools import combinations
from itertools import permutations
from sklearn.datasets import load_boston 

# the dataset
X, y = load_boston(return_X_y=True)
X = pd.DataFrame(X)

combos2 = list(combinations(X.columns,2))
perm3 = list(permutations(X.columns,3))  # how would i do this with out typing out all the permutations
for i in combos2:
    X[f'{i[0]}_X_{i[1]}'] = X.iloc[:,i[0]]*X.iloc[:,i[1]]  # Multiply
    X[f'{i[0]}_+_{i[1]}'] = X.iloc[:,i[0]]+X.iloc[:,i[1]]  # Add
    X[f'{i[0]}_-_{i[1]}'] = X.iloc[:,i[0]]-X.iloc[:,i[1]]  # Subtract
    X[f'{i[0]}_/_{i[1]}'] = X.iloc[:,i[0]]/(X.iloc[:,i[1]]+1e-20)   # Divide

我在想一种将“运算符+ *-/”添加到组合中的方法,因此与手动键入所有组合相比,可以用更少的行编写它,但是我不知道从哪里开始?

我想要所有订单:即(a * b + c),(a * b-c),(a * b / c)等

理想情况下,不保留重复的列。即(a + b + c)和(c + b + a)

例如,如果我有3列Ab c。我想要一个新列(a * b + c)。

哈里斯

这是一个幼稚的解决方案,可输出所有列的2和3的组合。

  1. 组合清单
  2. 使用运算符包实现功能
  3. for循环组合
  4. 这可能有重复的列,因此,重复项被删除
from sklearn.datasets import load_boston 
from itertools import combinations
import operator as op 

X, y = load_boston(return_X_y=True)
X =  pd.DataFrame(X)

comb= list(combinations(X.columns,3))

def operations(x,a,b):
   if (x == '+'): 
      d =  op.add(a,b) 
   if (x == '-'): 
      d =  op.sub(a,b) 
   if (x == '*'): 
      d =  op.mul(a,b)     
   if (x == '/'): # divide by 0 error
      d =  op.truediv(a,(b + 1e-20)) 
   return d


for x in ['*','/','+','-']:
  for y in ['*','/','+','-']:
    for i in comb:
      a = X.iloc[:,i[0]].values
      b = X.iloc[:,i[1]].values
      c = X.iloc[:,i[2]].values
      d = operations(x,a,b)
      e = operations(y,d,c)
      X[f'{i[0]}{x}{i[1]}{y}{i[2]}'] = e
      X[f'{i[0]}{x}{i[1]}'] = d

X = X.loc[:,~X.columns.duplicated()]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

筛选itertools组合以获取动态约束数量

来自分类Dev

使用itertools库获取对象组合?

来自分类Dev

枢转日期和值列以获取它们的组合

来自分类Dev

获取第一列的值和其他列的值的所有组合

来自分类Dev

Python itertools.combinations:如何获取组合数字的索引

来自分类Dev

获取列组合的重叠计数

来自分类Dev

获取列组合的重叠计数

来自分类Dev

Python itertools.combinations:如何同时获取组合内组合数字的索引

来自分类Dev

我想使用 itertools 的组合方法以列表列表的形式获取列表的所有组合

来自分类Dev

Python Itertools-组合groupby和配方工具的分组器

来自分类Dev

Itertools与索引组合

来自分类Dev

Python itertools 与 sum 组合

来自分类Dev

SQLAlchemy获取列组合的所有行

来自分类Dev

如何从熊猫列中获取组的组合

来自分类Dev

重定向操作符<和>的组合的订购要求

来自分类Dev

对象操作,唯一ID和组合值如何

来自分类Dev

HBase聚合,获取和放置操作,批量操作

来自分类Dev

检查数据框各列之间操作的多种组合的函数

来自分类Dev

python itertools.permutations组合

来自分类Dev

如何根据div类和ID组合获取值

来自分类Dev

使用网格布局和获取组合框

来自分类Dev

组合框:以 mvvm 方式获取文本和所选项目

来自分类Dev

分别获取组合字符串和整数的值

来自分类Dev

添加和获取列

来自分类Dev

大熊猫:获取相关性高的列的组合

来自分类Dev

如何在Spark中获取数组列的所有组合?

来自分类Dev

PostgreSQL-通过唯一的列组合获取记录

来自分类Dev

如何按列获取所有值组合的乘积?

来自分类Dev

MySQL如何获取列表列与其他列的组合

Related 相关文章

热门标签

归档