我有2个pandas
DataFrame
和act
想要合并为一个数据帧exp
:
df
import pandas as pd
from numpy.random import rand
act = pd.DataFrame(rand(3,2), columns=['a', 'b'])
exp = pd.DataFrame(rand(3,2), columns=['a', 'c'])
数据框act #have
a b
0 0.853910 0.405463
1 0.822641 0.255832
2 0.673718 0.313768
exp #have
a c
0 0.464781 0.325553
1 0.565531 0.269678
2 0.363693 0.775927
的列索引级别应比df
和act
多,并在其各自的level-0标识符下包含每个索引,如下所示:
exp
关于如何执行此操作的任何想法?
有点像df #want
act exp
a b a c
0 0.853910 0.405463 0.464781 0.325553
1 0.822641 0.255832 0.565531 0.269678
2 0.673718 0.313768 0.363693 0.775927
划分两个帧:
merge
...但是使用附加级别而不是后缀来防止名称冲突。
我尝试过:
act.merge(exp, left_index=True, right_index=True, suffixes=['_act', '_exp'])
a_act b a_exp c
0 0.853910 0.405463 0.464781 0.325553
1 0.822641 0.255832 0.565531 0.269678
2 0.673718 0.313768 0.363693 0.775927
我可以使用循环逐个建立#not working
pd.DataFrame({'act': act, 'exp':exp})
系列,但这似乎不正确。
非常感谢。
答案 0 :(得分:5)
也许您可以尝试使用concat
:
pd.concat([act, exp], axis=1, keys=['act', 'exp'])
结果:
act exp
a b a c
0 0.604027 0.933399 0.830059 0.317602
1 0.992192 0.991513 0.397223 0.904166
2 0.382579 0.981182 0.862077 0.239373
答案 1 :(得分:-1)
import numpy as np
import pandas as pd
from numpy.random import rand
act = pd.DataFrame(rand(3,2), columns=['a', 'b'])
exp = pd.DataFrame(rand(3,2), columns=['a', 'c'])
print(act)
print(exp)
df = pd.DataFrame(rand(3,4), columns=['act_a', 'act_b', 'exp_a', 'exp_c'])
# load data to act and exp
df['act_a'] = act['a']
df['act_b'] = act['b']
df['exp_a'] = exp['a']
df['exp_c'] = exp['c']
print(df)
输出:
a b
0 0.520894 0.451379
1 0.560014 0.427791
2 0.900554 0.326217
a c
0 0.766543 0.746780
1 0.207466 0.711153
2 0.341080 0.136082
act_a act_b exp_a exp_c
0 0.520894 0.451379 0.766543 0.746780
1 0.560014 0.427791 0.207466 0.711153
2 0.900554 0.326217 0.341080 0.136082