我想合并两个DataFrame,同时创建一个多级列命名方案,表示行来自哪个数据帧.例如:
In [98]: A=pd.DataFrame(np.arange(9.).reshape(3,3),columns=list('abc'))
In [99]: A
Out[99]:
a b c
0 0 1 2
1 3 4 5
2 6 7 8
In [100]: B=A.copy()
Run Code Online (Sandbox Code Playgroud)
如果我使用pd.merge(),那我就明白了
In [104]: pd.merge(A,B,left_index=True,right_index=True)
Out[104]:
a_x b_x c_x a_y b_y c_y
0 0 1 2 0 1 2
1 3 4 5 3 4 5
2 6 7 8 6 7 8
Run Code Online (Sandbox Code Playgroud)
这是我对该声明的期望,我想要的是什么(但我不知道如何获得!)是:
In [104]: <<one or more statements>>
Out[104]:
A B
a b c a b c
0 0 1 2 0 1 2
1 3 4 5 3 4 5
2 6 7 8 6 7 8
Run Code Online (Sandbox Code Playgroud)
这可以在不改变原始pd.DataFrame呼叫的情况下完成吗?我正在从.csv文件中读取数据框中的数据,这可能是我的问题.
第一种情况可以在A,B之间任意排序(不是列,只是顺序A或B)第二种情况可以保留排序
恕我直言这是潘东人!
In [5]: concat(dict(A = A, B = B),axis=1)
Out[5]:
A B
a b c a b c
0 0 1 2 0 1 2
1 3 4 5 3 4 5
2 6 7 8 6 7 8
In [6]: concat([ A, B ], keys=['A','B'],axis=1)
Out[6]:
A B
a b c a b c
0 0 1 2 0 1 2
1 3 4 5 3 4 5
2 6 7 8 6 7 8
Run Code Online (Sandbox Code Playgroud)
这是一种改变A和B的方法:
In [10]: from itertools import cycle
In [11]: A.columns = pd.MultiIndex.from_tuples(zip(cycle('A'), A.columns))
In [12]: A
Out[12]:
A
a b c
0 0 1 2
1 3 4 5
2 6 7 8
In [13]: B.columns = pd.MultiIndex.from_tuples(zip(cycle('B'), B.columns))
In [14]: A.join(B)
Out[14]:
A B
a b c a b c
0 0 1 2 0 1 2
1 3 4 5 3 4 5
2 6 7 8 6 7 8
Run Code Online (Sandbox Code Playgroud)
我实际上认为这将是一个很好的替代行为,而不是后缀......
| 归档时间: |
|
| 查看次数: |
1011 次 |
| 最近记录: |