2017-05-24 68 views
2

顶部我有2个样本数据集DFA和DFB:简单地把数据上的另一个大熊猫蟒蛇

import pandas as pd 


a = { 
'unit': ['A', 'B', 'C', 'D'], 
'count': [ 1, 12, 34, 52] 
} 

b = { 
'department': ['E', 'F'], 
'count': [ 6, 12] 
} 
dfa = pd.DataFrame(a) 
dfb = pd.DataFrame(b) 

他们的样子:

dfa 
count unit 
    1 A 
    12 B 
    34 C 
    52 D 


dfb 
count department 
6   E 
12   F 

我要的是简单的有DFA堆栈的顶部dfb不基于任何列或任何索引。我已检查此页面:https://pandas.pydata.org/pandas-docs/stable/merging.html,但找不到适合我的目的的页面。

我期望的输出是创建一个DFC看起来像下面的数据集,我想保持标题:

dfc: 

count  unit 
    1  A 
    12  B 
    34  C 
    52  D 
count department 
    6   E 
12   F 

回答

2

选项1
可以使用从头构建它np.vstack

pd.DataFrame(
    np.vstack([dfa.values, dfb.columns, dfb.values]), 
    columns=dfa.columns 
) 

    count  unit 
0  1   A 
1  12   B 
2  34   C 
3  52   D 
4 count department 
5  6   E 
6  12   F 

选项2
可以导出为CSV和读回

from io import StringIO 
import pandas as pd 

pd.read_csv(StringIO(
     '\n'.join([d.to_csv(index=None) for d in [dfa, dfb]]) 
    )) 

    count  unit 
0  1   A 
1  12   B 
2  34   C 
3  52   D 
4 count department 
5  6   E 
6  12   F 
+0

我最喜欢option1,因为我可以在该行中放置2个以上的数据集。你的选项2也不错,但是选项1对我来说更直接 – Jessica

3
In [37]: pd.concat([dfa, pd.DataFrame(dfb.T.reset_index().T.values, columns=dfa.columns)], 
        ignore_index=True) 
Out[37]: 
    count  unit 
0  1   A 
1  12   B 
2  34   C 
3  52   D 
4 count department 
5  6   E 
6  12   F 

In [39]: dfa.append(pd.DataFrame(dfb.T.reset_index().T.values, columns=dfa.columns)) \ 
      .reset_index(drop=True) 
Out[39]: 
    count  unit 
0  1   A 
1  12   B 
2  34   C 
3  52   D 
4 count department 
5  6   E 
6  12   F 

UPDATE:合并3级的DF :

pd.concat([dfa, 
      pd.DataFrame(dfb.T.reset_index().T.values, columns=dfa.columns), 
      pd.DataFrame(dfc.T.reset_index().T.values, columns=dfa.columns)], 
      ignore_index=True) 
+0

如果有超过2个数据集,如何将它们全部放在一行中? – Jessica

0
dfa.loc[len(dfa),:] = dfb.columns 
dfb.columns = dfa.columns 
dfa.append(dfb)