按索引连接两个数据帧

时间:2016-03-19 09:06:28

标签: python pandas

我有两个数据帧,我想合并/添加/连接它们 示例

>>> df
    name   name1   name2  v1  v2  v3
0   test   test1   test2   5  10  15
1  test1  test11  test21   6  11  16

>>> df2
    name   name1   name2  v1  v2  v3
0   test   test1   test2   7  12  18
1  test2  test15  test25   3   5   1

我可以通过multiindex连接它们,比如

>>> pd.concat([df, df2]).groupby(['name', 'name1', 'name2'])['v1', 'v2', 'v3'].sum()
                     v1  v2  v3
name  name1  name2             
test  test1  test2   12  22  33
test1 test11 test21   6  11  16
test2 test15 test25   3   5   1

或为每个df设置multiindex并添加,如

>>> df.set_index(['name', 'name1', 'name2']).add(df2.set_index(['name', 'name1', 'name2']), fill_value=0)
                     v1  v2  v3
name  name1  name2             
test  test1  test2   12  22  33
test1 test11 test21   6  11  16
test2 test15 test25   3   5   1

我的问题是,我可以通过索引'名称',汇总v1,v2,v3添加它们,只需从名称'中复制name1和name2,因为在我的数据框架中如果是nameX等于nameY,然后name1X和name1Y等于,与name2X和name2Y相同。 数据帧太大所以我想避免多索引

alghorithm:concat df和df2,groupby by name,sum v1,v2,v3 and add name1 and name2 from df / df2 where exists

提前致谢!

用于创建测试数据的命令

df = pd.DataFrame(columns=['name', 'name1', 'name2', 'v1', 'v2', 'v3'])
df = df.append({'name': 'test', 'name1': 'test1', 'name2': 'test2', 'v1': 5, 'v2': 10, 'v3': 15}, ignore_index=True)
df = df.append({'name': 'test1', 'name1': 'test11', 'name2': 'test21', 'v1': 6, 'v2': 11, 'v3': 16}, ignore_index=True)
df2 = pd.DataFrame(columns=['name', 'name1', 'name2', 'v1', 'v2', 'v3'])
df2 = df2.append({'name': 'test', 'name1': 'test1', 'name2': 'test2', 'v1': 7, 'v2': 12, 'v3': 18}, ignore_index=True)
df2 = df2.append({'name': 'test2', 'name1': 'test15', 'name2': 'test25', 'v1': 3, 'v2': 5, 'v3': 1}, ignore_index=True)

1 个答案:

答案 0 :(得分:0)

也许你可以创建一个循环来迭代每个比较的值,如果是,则将这些项放在一起。

  

df = [......] df2 = [...]

     

表示df范围内的密钥(len(df)):       如果df [key] == df2 [key]:           #concate这里的值           返回值#然后返回它们