gpt4 book ai didi

python - 如何将所有列相互相乘

转载 作者:行者123 更新时间:2023-12-05 04:19:10 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,我想向它添加新功能,如下所示:

假设我有特征 X_1,X_2,X_3 和 X_4,然后我想添加 X_1 * X_2, X_1 * X_3, X_1 * X_4,类似地 X_2 * X_3、X_2 * X_4X_3 * X_4。我想添加它们,而不是替换原来的功能。

我该怎么做?

最佳答案

for c1, c2 in combinations(df.columns, r=2):
df[f"{c1} * {c2}"] = df[c1] * df[c2]

您可以采用每 r = 2 列的组合,将它们相乘并赋值。

运行示例:

In [66]: df
Out[66]:
x1 y1 x2 y2
0 20 5 22 10
1 25 8 27 2

In [67]: from itertools import combinations

In [68]: for c1, c2 in combinations(df.columns, r=2):
...: df[f"{c1} * {c2}"] = df[c1] * df[c2]
...:

In [69]: df
Out[69]:
x1 y1 x2 y2 x1 * y1 x1 * x2 x1 * y2 y1 * x2 y1 * y2 x2 * y2
0 20 5 22 10 100 440 200 110 50 220
1 25 8 27 2 200 675 50 216 16 54

另一种方式通过sklearn.preprocessing.PolynomialFeatures :

In [74]: df
Out[74]:
x1 y1 x2 y2
0 20 5 22 10
1 25 8 27 2

In [75]: from sklearn.preprocessing import PolynomialFeatures

In [76]: poly = PolynomialFeatures(degree=2,
interaction_only=True,
include_bias=False)

In [77]: poly.fit_transform(df)
Out[77]:
array([[ 20., 5., 22., 10., 100., 440., 200., 110., 50., 220.],
[ 25., 8., 27., 2., 200., 675., 50., 216., 16., 54.]])

In [78]: new_columns = df.columns.tolist() + [*map(" * ".join,
combinations(df.columns, r=2))]

In [79]: df = pd.DataFrame(poly.fit_transform(df), columns=new_columns)

In [80]: df
Out[80]:
x1 y1 x2 y2 x1 * y1 x1 * x2 x1 * y2 y1 * x2 y1 * y2 x2 * y2
0 20.0 5.0 22.0 10.0 100.0 440.0 200.0 110.0 50.0 220.0
1 25.0 8.0 27.0 2.0 200.0 675.0 50.0 216.0 16.0 54.0

关于python - 如何将所有列相互相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74928049/

25 4 0
文章推荐: c# - 将字节数组保存为 Pgn 或 Jpg
文章推荐: java - 为什么gson在序列化java.time.ZoneId的时候要找java.time.ZoneRegion?
文章推荐: c# - 为什么 C# Func 不能赋值给 Func