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)