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的初学者,所以也许有一个我不知道的简单解决方案.
谢谢您的帮助!
像这样的东西可以与 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)