繁体   English   中英

如何在熊猫索引上合并/合并/合并数据帧

[英]How to merge/join/concat dataframes on index in pandas

我有一个主数据框df1,它是“空”的,还有一些其他长度不同但与df1列相同的数据框。 我想在df1的某些索引位置上合并/ join / concat df2和df3:

df1 = pd.DataFrame(index=(np.arange(20)), columns=['A', 'B', 'C', 'D'])  
df2 = pd.DataFrame(randn(5, 4), columns=['A', 'B', 'C', 'D'])  
df3 = pd.DataFrame(randn(2, 4), columns=['A', 'B', 'C', 'D'])  
df4 = pd.concat([df1, df2, df3],axis=0, keys=['','df2','df3'])  

但是,concat([df1,df2,df3],axis = 0,keys ....)将dfs连续放在一起...

例如,df2应该从df1.index(3)开始,而df3应该从df1.index(12)开始,而在df2和df3之前,之间和之后保留df1的NAN。

您将无法使用这样的concat实现所需的功能,或者无法重新索引就无法合并。 对于concat ,默认情况下将使用原始索引值,并将它们彼此堆叠在一起。 如果您尝试使用索引进行合并,则它们将发生冲突并创建附加列,例如'X_x,'X_y'等。

最简单的方法是重新索引dfs,然后调用update以覆盖所需行的NaN:

In [55]:

df1 = pd.DataFrame(index=(np.arange(20)), columns=['A', 'B', 'C', 'D'])  
df2 = pd.DataFrame(randn(5, 4), columns=['A', 'B', 'C', 'D'], index=arange(3,8))  
df3 = pd.DataFrame(randn(2, 4), columns=['A', 'B', 'C', 'D'], index=arange(12,14))  
df1.update(df2 )
df1.update(df3)
df1
Out[55]:
            A          B          C          D
0         NaN        NaN        NaN        NaN
1         NaN        NaN        NaN        NaN
2         NaN        NaN        NaN        NaN
3    1.315786 -0.4132373   1.084278  -0.945918
4    2.663868  0.8093393 -0.9853748  -1.428507
5   0.1414072  0.1896291   1.562247  0.1180398
6    1.699411   1.518535 -0.1854568  -0.430911
7   -1.716514   1.053428  0.3587436   1.471504
8         NaN        NaN        NaN        NaN
9         NaN        NaN        NaN        NaN
10        NaN        NaN        NaN        NaN
11        NaN        NaN        NaN        NaN
12 -0.5668472  -0.137524  0.1769178  0.7065836
13  -1.726548  0.2645793  0.1484438  -1.099373
14        NaN        NaN        NaN        NaN
15        NaN        NaN        NaN        NaN
16        NaN        NaN        NaN        NaN
17        NaN        NaN        NaN        NaN
18        NaN        NaN        NaN        NaN
19        NaN        NaN        NaN        NaN

因此,您可以在创建后修改索引,如下所示:

In [56]:

df2 = pd.DataFrame(randn(5, 4), columns=['A', 'B', 'C', 'D'])
print(df2)
df2.index = index=arange(3,8)
df2
          A         B         C         D
0 -0.417199  0.184960 -1.056915  0.674005
1  0.592654  1.131421 -0.958991  0.831648
2 -1.087500  0.664596 -1.508290  2.453404
3  1.441886 -0.131998  0.040513 -2.675875
4  1.547340 -0.230203  1.335917 -1.568939
Out[56]:
          A         B         C         D
3 -0.417199  0.184960 -1.056915  0.674005
4  0.592654  1.131421 -0.958991  0.831648
5 -1.087500  0.664596 -1.508290  2.453404
6  1.441886 -0.131998  0.040513 -2.675875
7  1.547340 -0.230203  1.335917 -1.568939

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM