有两个数据框,如何创建第三个

亚当杜德

我有一个数据框 df1

    col1    val1
1   a       2
2   b       3

和 df2(不同长度)

    col2    val2
1   A       2
2   B       3
3   C       1

我需要一个看起来像这样的第三个 df

    colx    coly    sum
1   a       A       4
2   a       B       5
3   a       C       3
4   b       A       5
5   b       B       3
6   b       C       4

所以 df3 中的行数是df1.shape[0] * df2.shape[0],并且在我对值进行计算的地方添加了第三列(在这种情况下,为了简单起见,它只是总和)。第三个 df 的行一一表示一个值df1与所有值之间的关系df2

这是我尝试过的,但我认为这不是一个好方法

cols = [colx, coly, sum]

df3 = pd.DataFrame(columns = cols)

for index, row in df1.iterrows():
    for index2, row2 in df2.iterrows():
        df3.append({'colx': row['col1'], 'coly': row2['col2'], 'sum': row['val1']+row2['val2']}, ignore_index=True)

我真的不知道如何在标题中描述这一点,抱歉

耶斯列

使用crossmerge with sum,DataFrame.pop用于求和后删除的列:

df = df1.merge(df2, how='cross')
df['sum'] = df.pop('val1') + df.pop('val2')
print (df)
  col1 col2  sum
0    a    A    4
1    a    B    5
2    a    C    3
3    b    A    5
4    b    B    6
5    b    C    4

或者可以创建Series,然后MultiIndex.from_product使用Series.reindex

s1 = df1.set_index('col1')['val1']
s2 = df2.set_index('col2')['val2']

mux = pd.MultiIndex.from_product([s1.index, s2.index])

df = (s1.reindex(mux, level=0) + s2.reindex(mux, level=1)).reset_index(name='sum')
print (df)
  col1 col2  sum
0    a    A    4
1    a    B    5
2    a    C    3
3    b    A    5
4    b    B    6
5    b    C    4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据应用于两个数据框的条件创建第三个数据框

Pandas 检查两个数据框列并访问第三个值

比较两个数据框列并输出第三个

以第三个为x轴绘制两个数据框列

基于第三个数据框中匹配值的具有新布尔值列的两个数据框的乘积

在前两个数组的基础上创建第三个数组

我想比较两个numpy数组并创建第三个数组

将两个csv文件与python pandas比较,并使用产生的数据框创建第三个文件

有没有办法将两个数据集同时连接到第三个?

如何添加两个数组以生成第三个数组?

从两个数组中获取正数,然后从中创建第三个

创建两个数组,然后在用作两个微调器uipickerview的数据的第三个数组中使用它们

使用第三个值从数据框中提取两个值

如何使用循环和索引从两个现有向量创建第三个向量?

从两个不同数据框中的列中求和和百分比,并将结果附加到第三个数据框中

根据多个选择条件匹配的两个不同数据框中的行构建第三个数据框

如何使用键值从两个对象创建第三个对象

JS数组:如何比较两个并创建第三个

如何从两个相关表中获取数据并放入第三个表

如何从两个DataGridViews中获取数据到第三个DataGridView中?

将两个数据库合并为第三个数据库

如何将两个活动的两个数字相加并输出到第三个活动

php 创建一个带有额外值的第三个数组,其中的键与两个现有数组相匹配

我如何合并这两个数据帧以在Spark Scala中生成第三个数据帧?

Java映射两个数组中的数据并将其插入第三个数组

如何重新排列从两个变量中创建四个连续变量和两个层次的第三个分类变量的数据框?

如何在第三个数组中对两个数组的值进行分组?

在链接这两个数据帧的第三个数据帧上合并两个数据帧

如果数据中的前两个值小于数据中的第三个值,则如何根据返回值的条件过滤数据框?