我有两个具有不同行号和列的数据框。这两个表都有很少的公共列,包括“客户ID”。这两个表的大小分别为11697行×15列和385839行×6列。客户ID在第二张表中可能重复。我想合并两个表,并希望使用客户ID合并相似的列。如何使用python PANDAS做到这一点。 一张桌子看起来像这样-
我正在使用以下代码-
@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是否有多个条目,如何将其合并为一个结果?
编辑-
有人可以告诉我我哪里出问题了吗?
答案 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()