【问题标题】:Sum all combinations of 2 columns from 2 dataframes将 2 个数据帧中 2 列的所有组合相加
【发布时间】:2022-01-20 10:05:37
【问题描述】:

我有 2 个数据框 df1 和 df2(相同的索引和行数),我想创建一个新的数据框,其中列是 df1 和 df2 中 2 列的所有组合的总和,例如:

输入:

import pandas as pd
df1 =  pd.DataFrame([[10,20]])
df2 =  pd.DataFrame([[1,2]])

输出:

import pandas as pd
df3 =  pd.DataFrame([[11,12,21,22]])

【问题讨论】:

  • df1 = pd.DataFrame([[10,20,30,40]])df2 = pd.DataFrame([[1,2,3,4]]) 的输出是什么?
  • @mozway - 一个有 16 列的数据框 [[11,12,...,43,44]]
  • 好的,那它确实是一个产品;)

标签: python pandas dataframe sum combinations


【解决方案1】:

对所有组合使用MultiIndex.from_product,并通过DataFrame.reindex对具有重复值的DataFrame求和:

mux = pd.MultiIndex.from_product([df1.columns, df2.columns])

df = df1.reindex(mux, level=0, axis=1) + df2.reindex(mux, level=1, axis=1)
df.columns = range(len(df.columns))

【讨论】:

  • 你好,谢谢,当我用 df2 替换第一行中的第二个 df1 时,这有效
  • @AJM7564 - 超级,答案已更改。
【解决方案2】:

IIUC 你可以用 numpy 做到这一点。

>>> import numpy as np
>>> n = df1.shape[1]
>>> pd.DataFrame(df1.values.repeat(n) + np.tile(df2.values, n))
    0   1   2   3
0  11  12  21  22

【讨论】:

  • 您好,谢谢。这不适用于具有不同列数的 2 个数据帧(当我将“df1.values.repeat(n)”替换为“df1.values.repeat(df2.shape[1])”时)。它也不适用于具有更多 tahn 1 行的数据框(也许重塑会有所帮助)。
猜你喜欢
  • 2016-05-07
  • 2020-11-02
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2019-08-10
  • 1970-01-01
  • 2018-10-17
相关资源
最近更新 更多