gpt4 book ai didi

python - 生成任意 2 列的所有二次组合

转载 作者:行者123 更新时间:2023-11-30 22:56:17 25 4
gpt4 key购买 nike

我有一个 DataFrame df ,其中包含 C1C2C3 列,C4。我想要一个新的 DataFrame,其中表示一列与另一列相乘的每个组合。这意味着在开始时有 4 列的情况下,我们应该有 sum(4, 3, 2, 1) = 10 列。此外,这些列应标记为 MultiIndex,其中每个级别标识要相乘的原始列之一。

如果

df = pd.DataFrame(np.random.rand(2, 4) * 10, columns=['C1', 'C2', 'C3', 'C4']).astype(int)

print df

C1 C2 C3 C4
0 8 0 5 6
1 4 5 3 5

我希望df_quad看起来像:

   C1              C2          C3      C4
C1 C2 C3 C4 C2 C3 C4 C3 C4 C4
0 64 0 40 48 0 0 0 25 30 36
1 16 20 12 20 25 15 25 9 15 25

最佳答案

试试这个:

from itertools import combinations, combinations_with_replacement

data = """\
C1 C2 C3 C4
0 8 0 5 6
1 4 5 3 5
"""
df = pd.read_csv(io.StringIO(data), delim_whitespace=True, index_col=0)

combs = list(combinations_with_replacement(df.columns.tolist(), 2))

df_quad = pd.DataFrame()

for tup in combs:
df_quad['{0[0]}_{0[1]}'.format(tup)] = df[tup[0]] * df[tup[1]]

测试:

In [77]: df_quad
Out[77]:
C1_C1 C1_C2 C1_C3 C1_C4 C2_C2 C2_C3 C2_C4 C3_C3 C3_C4 C4_C4
0 64 0 40 48 0 0 0 25 30 36
1 16 20 12 20 25 15 25 9 15 25

In [156]: df_quad.columns = pd.MultiIndex.from_tuples(combs)

In [157]: df_quad
Out[157]:
C1 C2 C3 C4
C1 C2 C3 C4 C2 C3 C4 C3 C4 C4
0 64 0 40 48 0 0 0 25 30 36
1 16 20 12 20 25 15 25 9 15 25

In [78]: combs
Out[78]:
[('C1', 'C1'),
('C1', 'C2'),
('C1', 'C3'),
('C1', 'C4'),
('C2', 'C2'),
('C2', 'C3'),
('C2', 'C4'),
('C3', 'C3'),
('C3', 'C4'),
('C4', 'C4')]

关于python - 生成任意 2 列的所有二次组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37086391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com