根据列值合并数据框

时间:2020-06-27 08:51:55

标签: python python-3.x pandas dataframe

我有以下3个数据帧

df_hl

EXTRACT(MONTH FROM <value>)

df_sc

State   District    Level   Name    TRU No_HH   TOT_HL_P   TOT_HL_M
0   0   India   India   Total   449787  1773040 
0   0   India   India   Rural   192891  834692  
0   0   India   India   Urban   256896  938348  

df_st

State   District    Level   Name    TRU   No_HH_Head_sc TOT_P_sc
0   0   India   India   Total   41694863    201378372
0   0   India   India   Rural   31803775    153850848   
0   0   India   India   Urban   9891088     47527524        

这些是我对数据框的名称进行预处理后的结构。原始数据集中的列和行数更多。

我要做的是根据以下各列组合所有这些数据框:`州,地区,级别,名称和TRU。

我的结果数据框应采用以下格式:

State   District    Level   Name    TRU   No_HH_Head_st   TOT_P_st   TOT_M_st
0   0   India   India   Total   21511528    104545716   52547215    
0   0   India   India   Rural   19302332    94083844    47263733    
0   0   India   India   Urban   2209196     10461872    5283482

我试图根据这些列创建索引,但是不知道如何合并所有列。任何帮助将不胜感激。

State   District    Level   Name    TRU No_HH   TOT_HL_P   TOT_HL_M   No_HH_Head_sc  TOT_P_sc  No_HH_Head_st   TOT_P_st   TOT_M_st 
0   0   India   India   Total   449787  1773040   41694863    201378372  21511528    104545716   52547215
0   0   India   India   Rural   192891  834692   31803775    153850848 19302332    94083844    47263733  
0   0   India   India   Urban   256896  938348  41694863    201378372   2209196     10461872    5283482

非常感谢。

2 个答案:

答案 0 :(得分:1)

看起来像您想要的东西

df1.merge(df2,how='left').merge(df3,how='left')

答案 1 :(得分:0)

您可能想要的是数据框的内部连接。假设您将熊猫导入为import pandas as pd

df_final = pd.merge(left=pd.merge(left=df_hl, right=df_sc, on=["State", "District", "Level", "Name", "TRU"]), right=df_st, on=["State", "District", "Level", "Name", "TRU"])

此处介绍了使用任意数量的数据帧执行此操作的更通用方法:

pandas three-way joining multiple dataframes on columns

import functools
dfs = [df_hl, df_sc, df_st]
df_final = functools.reduce(lambda left, right: pd.merge(left=left, right=right, on=["State", "District", "Level", "Name", "TRU"]), dfs)