我想连接2个csv文件。每个CSV文件都具有以下结构:
档案1
id,name,category-id,lat,lng
4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208431
4ede330477,Punto Snai,4bf58dd8d,45.44833354,9.144086353
51efd91d49,Gelateria Cecilia,4bf58dd8d,45.44848931,9.144008735
文件2
id,name,category-id,lat,lng
4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208432
4ede330477,Punto Snai,4bf58dd8d,45.44833354,9.144086353
51efd91d49,Gelateria Cecilia,4bf58dd8d,45.44848931,9.144008735
5748729449,Duomo Di Milano,52e81612bc,45.463898,9.192034
我得到了一个看起来像
的最终csv最终文件
id,name,category-id,lat,lng
4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208431
4c29e1c197,Area51,4bf58dd8d,45.44826958,9.144208432
4ede330477,Punto Snai,4bf58dd8d,45.44833354,9.144086353
51efd91d49,Gelateria Cecilia,4bf58dd8d,45.44848931,9.144008735
5748729449,Duomo Di Milano,52e81612bc,45.463898,9.192034
所以我这样做了:
import pandas as pd
df1=pd.read_csv("file1.csv")
df2=pd.read_csv("file2.csv")
full_df = pd.concat(df1,df2)
full_df = full_df.groupby(['id','category_id','lat','lng']).count()
full_df2 = full_df[['id','category_id']].groupby('id').agg('count')
full_df2.to_csv("final.csv",index=False)
我尝试通过id,categoy_id,lat和lng分组,名称可能会改变 在第一个groupby之后,我想再次分组,但是现在由id和category_id组成,因为如我的例子中所示,第一行改变为long,但这可能是因为file2是file1的更新
我不了解groupby,因为当我尝试打印时,我只得到了计数值。
答案 0 :(得分:2)
解决此问题的一种方法是在连接两个DataFrame之后使用df.drop_duplicates()。另外,drop_duplicates有一个参数" keep",它允许您指定要保留最后一次出现的重复项。
full_df = pd.concat([df1,df2])
unique_df = full_df.drop_duplicates(keep='last')
如果您需要进一步的帮助,请检查documentation是否有drop_duplicates。
答案 1 :(得分:0)
我可以使用下一个代码来解决这个问题:
import pandas as pd
df1=pd.read_csv("file1.csv")
df2=pd.read_csv("file2.csv")
df_final=pd.concat([df1,df2]).drop_duplicates(subset=['id','category_id','lat','lng']).reset_index(drop=True)
print(df_final.shape)
df_final2=df_final.drop_duplicates(subset=['id','category_id']).reset_index(drop=True)
df_final2.to_csv('final', index=False)