在多列上合并两个DataFrame

时间:2018-01-05 10:41:54

标签: pandas dataframe merge

希望你能帮助我。

我有两个相当大的数据集。 DF1示例:

Workflow| Operation | Profile |    Type     | Name | ...
123           1          2       Low_Cost     xyz    ...
456           2          5       High_Cost    z      ...

DF2示例:

all_Data = pd.merge(left=DF1,right=DF2, how='inner', left_on =['A_Workflow_Type_ID ','B_Workflow_Type_ID '], right_on=['Workflow'])

我需要合并两个数据集而不创建多个NaN和多个列。所以我在DF2的工作流上合并来自DF1的信息A_Workflow_Type_ID和B_Workflow_Type_ID。 我在pandas中使用了几个连接操作并且它失败了合并选项。

我的最后一次尝试:

void (^block)(FIRDataSnapshot *);
block = ^void(FIRDataSnapshot *snapshot) {
    FIRDatabaseQuery *query;

    [query observeSingleEventOfType:FIRDataEventTypeValue
                  withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
    }];
};

FIRDatabaseQuery *query;

[query observeSingleEventOfType:FIRDataEventTypeValue withBlock:block];

但是这会返回一个错误,即双方必须保持相同的长度。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要先melt然后merge重新整形:

#generate all column without strings Workflow
cols = DF1.columns[~DF1.columns.str.contains('Workflow')]
print (cols)
Index(['id'], dtype='object')

df = DF1.melt(cols, value_name='Workflow', var_name='type')
print (df)
   id                type  Workflow
0   1  A_Workflow_Type_ID     123.0
1   2  A_Workflow_Type_ID     789.0
2   3  A_Workflow_Type_ID     333.0
3   1  B_Workflow_Type_ID     456.0
4   2  B_Workflow_Type_ID     222.0
5   3  B_Workflow_Type_ID       NaN

all_Data = pd.merge(left=df,right=DF2,  on ='Workflow')
print (all_Data)
   id                type Workflow  Operation  Profile       Type Name
0   1  A_Workflow_Type_ID      123          1        2   Low_Cost  xyz
1   1  B_Workflow_Type_ID      456          2        5  High_Cost    z