在数据分析中,我们常常需要将不同的数据表中的相同数据进行合并。Pandas提供了简单易用的方法来实现这个功能。本文介绍如何使用Pandas的groupby和aggregate方法合并相同的行数据。
假设我们有两张数据表:
python
df=pd.DataFrame([['AAA',3],['BBB',4],['CCC',5],['AAA',8],['CCC',9]],columns=['item','num'])
df1=pd.DataFrame([['AAA',11],['BBB',4],['CCC',14]],columns=['item','num'])
我们要将df和df1按item列合并,得到的结果为:
item num
0 AAA 11
1 BBB 4
2 CCC 14
## 分组聚合
首先,我们使用`.groupby()`对df和df1进行分组,分组键为item列:
python
df_grouped = df.groupby('item')
df1_grouped = df1.groupby('item')
然后,使用`.aggregate()`选择num列求和,得到两张分组求和后的DataFrame:
python
df_sum = df_grouped['num'].aggregate(np.sum)
df1_sum = df1_grouped['num'].aggregate(np.sum)
## 拼接表格
我们重命名df_sum为df,df1_sum为df1_sum,然后使用`pd.concat()`方法按item列拼接:
python
df = df_sum.reset_index()
df1_sum = df1_sum.reset_index()
result = pd.concat([df, df1_sum], ignore_index=True)
此时的result表格有重复行,我们使用`.drop_duplicates()`删除重复行,并重命名列名:
python
result = result.drop_duplicates(['item'])
result = result.rename(columns={'num_x': 'num', 'num_y': 'num'})
## 完整代码
python
df_grouped = df.groupby('item')
df_sum = df_grouped['num'].aggregate(np.sum)
df = df_sum.reset_index()
df1_grouped = df1.groupby('item')
df1_sum = df1_grouped['num'].aggregate(np.sum)
df1_sum = df1_sum.reset_index()
result = pd.concat([df, df1_sum], ignore_index=True)
result = result.drop_duplicates(['item'])
result = result.rename(columns={'num_x': 'num', 'num_y': 'num'})
通过上述方法,我们成功实现了使用Pandas合并两个数据表中相同行数据的功能。我们只需要数行代码,便可以轻松处理表格合并的任务。