将数据框中的每列与Python右侧的列相乘

Lis*_*isa 5 python numpy pandas

我有一个大型数据框,大约有400,000个观测值和6.500个列.我正在寻找一种快速的方法,将每列与右侧的列相乘.

示例数据框可能如下所示:

| V1  | V2  | V3  |  
----------------------
|  1  |  2  |  1  |
|  0  |  4  |  1  |
|  1  |  3  |  3  |
Run Code Online (Sandbox Code Playgroud)

我想最终得到这样的东西:

| V1 | V2 | V3 | V1_V2 | V1_V3 | V2_V3 |
-----------------------------------------
|  1 |  2 |  1 |    2  |   1   |   2   |
|  0 |  4 |  1 |    0  |   0   |   4   |
|  1 |  3 |  3 |    3  |   0   |   9   |
Run Code Online (Sandbox Code Playgroud)

我试过itertools.combinations但是太慢了.我是Python的初学者,所以也许有一个我不知道的简单解决方案.

谢谢您的帮助!

Zan*_*hin 0

像这样的东西可以与 itertools 一起使用:

import pandas as pd
import numpy as np
from  itertools import combinations
from io import StringIO

data = """
v1 v2 v3
1 2 1
0 4 1
1 3 3
"""

df = pd.read_csv(StringIO(data), sep='\s+')

l = list(combinations(df.columns,2))
df_add = pd.concat([df[col[1]] * (df[col[0]]) for col in l], axis=1, keys=l)
df_add.columns = df_add.columns.map(''.join)

df_add

   v1v2  v1v3  v2v3
0     2     1     2
1     0     0     4
2     3     3     9

df.join(df_add)

   v1  v2  v3  v1v2  v1v3  v2v3
0   1   2   1     2     1     2
1   0   4   1     0     0     4
2   1   3   3     3     3     9
Run Code Online (Sandbox Code Playgroud)