Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并期间,合并列_Python_Pandas - Fatal编程技术网

Python 合并期间,合并列

Python 合并期间,合并列,python,pandas,Python,Pandas,我需要使用具有以下属性的pandas合并多个数据帧: 数据帧总是有相同的列,例如名称,类型,和值 合并需要考虑两列,name和type,以便识别匹配项 数据帧可能具有不同的行数 在上面的示例中,另一列value,应该在合并后生成一列。如果两个数据集有一行具有相同的名称和类型,则值的结果应为每个数据集的值之和 我不关心行的索引 例如,如果我有数据帧df1: df1: name type value 0 foo A 11 1 bar B

我需要使用具有以下属性的pandas合并多个数据帧:

  • 数据帧总是有相同的列,例如
    名称
    类型
    ,和
  • 合并需要考虑两列,
    name
    type
    ,以便识别匹配项
  • 数据帧可能具有不同的行数
  • 在上面的示例中,另一列
    value
    ,应该在合并后生成一列。如果两个数据集有一行具有相同的
    名称
    类型
    ,则
    的结果应为每个数据集的值之和
  • 我不关心行的索引
例如,如果我有
数据帧df1

df1:
      name type  value
    0  foo    A     11
    1  bar    B     12
以及
数据帧df2

df2:
      name type  value
    0  foo    A     21
    1  bar    C     22
    2  baz    C     23
那么我希望结果是

result_want:
      name type  value
    0  foo    A     32
    1  bar    B     12
    2  bar    C     22
    3  baz    C     23
到目前为止,我发现最好的方法是如何进行合并,如下所示:

import pandas as pd

df1 = pd.DataFrame({ 
        "name": ["foo", "bar"], 
        "type": ["A", "B"],
        "value": [11, 12]
    })


df2 = pd.DataFrame({ 
        "name": ["foo", "bar", "baz"], 
        "type": ["A", "C", "C"], 
        "value": [21, 22, 23]
    })

result = pd.merge(df1, df2, how='outer', on=['name', 'type'])
print(result)
给予

你可以在这里用

 name type  value_x  value_y
0  foo    A     11.0     21.0
1  bar    B     12.0      NaN
2  bar    C      NaN     22.0
3  baz    C      NaN     23.0
out = pd.concat([df1, df2])
out.groupby(['name', 'type'], as_index=False).sum()

  name type  value
0  bar    B     12
1  bar    C     22
2  baz    C     23
3  foo    A     32