Python 按索引连接两个数据帧

Python 按索引连接两个数据帧,python,pandas,Python,Pandas,我有两个数据帧,我想合并/添加/合并它们 范例 我可以通过多重索引来计算它们,比如 >>> 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 test2

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

我可以通过多重索引来计算它们,比如

>>> 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和add设置多索引,如

>>> 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
我的问题是,我可以通过索引'name'将它们相加,求和v1、v2、v3,然后从'name'复制name1和name2,因为在我的数据帧中,如果nameX等于nameY,那么name1X和name1Y等于name2X和name2Y。 数据帧太大,因此我希望避免多索引

算法:concat df和df2,按名称分组,求和v1、v2、v3,并从df/df2中添加name1和name2(如果存在)

提前谢谢

用于创建测试数据的命令

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)

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

df=[…]df2=[…]

对于范围内测向的测向键(len(df)): 如果df[key]==df2[key]: #在这里连接这些值 返回值#然后返回它们


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

df=[…]df2=[…]

对于范围内测向的测向键(len(df)): 如果df[key]==df2[key]: #在这里连接这些值 返回值#然后返回它们

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)