Python Pandas-Concat两个具有不同行数和列数的数据框

时间:2019-06-15 07:35:10

标签: python pandas data-science data-analysis

我有两个具有不同行号和列的数据框。这两个表都有很少的公共列,包括“客户ID”。这两个表的大小分别为11697行×15列和385839行×6列。客户ID在第二张表中可能重复。我想合并两个表,并希望使用客户ID合并相似的列。如何使用python PANDAS做到这一点。 一张桌子看起来像这样-

enter image description here

,另一个看起来像这样- enter image description here

我正在使用以下代码-

 @Override
    public void onLocationChanged(final Location location) {
        if(inRun){
            Clocation myLocation = new Clocation(location, this.useMetricUnits());
            this.updateSpeed(myLocation);
            this.updateDistance(myLocation);
            this.updateAverageSpeed(this.distance, this.chronometer);
            if (activity.getText().toString() != ActivityRecongnizedService.getActivity()) {
                activity.setText(ActivityRecongnizedService.getActivity());
                activityTimer.start();
            }


            switch (activity.getText().toString()) {
                case "STILL": still = true; break;
                case "IN VEHICLE": inVehicle = true; break;
                case "ON BICYCLE": onBicycle = true; break;
                case "ON FOOT": onFoot = true; break;
                case "RUNNING": running = true; break;
                case "WALKING": walking = true;break;
                case "TILTING": tilting = true; break;
            }

            setTimeActivity();

            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            String[] key;
            key = user.getEmail().split("@");
            reference.child("Position").child(key[0]).child("latlng").setValue(new LatLng(location.getLatitude(),location.getLongitude()));

        }
    }

只想确保我不会丢失任何信息?如何检查一个ID是否有多个条目,如何将其合并为一个结果?

编辑-

当我使用上述代码时,这是数据集中NA'S值的前后- enter image description here

有人可以告诉我我哪里出问题了吗?

2 个答案:

答案 0 :(得分:0)

我相信DataFrame.merge在这种情况下会起作用:

# use how='outer' to preserve all information from both DataFrames
df1.merge(df2, how='outer', on='customer_id')
如果两个DataFrame的索引都设置为DataFrame.join(也更简单),

customer_id也可以工作:

df1 = df1.set_index('customer_id')
df2 = df2.set_index('customer_id')
df1.join(df2, how='outer')

答案 1 :(得分:0)

pd.concat将在此处解决问题,只需将轴设置为1以在第二个轴(列)上串联,您应该首先将两个数据帧的索引都设置为customer_id

import pandas as pd
pd.concat([df1.set_index('customer_id'), df2.set_index('customer_id')], axis = 1)

如果由于连接而希望省略具有空值的行,请使用dropna:

pd.concat([df1.set_index('customer_id'), df2.set_index('customer_id')], axis = 1).dropna()