我有两个数据帧,我想合并/添加/连接它们 示例
>>> 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)
答案 0 :(得分:0)
也许你可以创建一个循环来迭代每个比较的值,如果是,则将这些项放在一起。
df = [......] df2 = [...]
表示df范围内的密钥(len(df)): 如果df [key] == df2 [key]: #concate这里的值 返回值#然后返回它们