pandas groupby 后merge 保留groupby的列
在数据处理中,经常会遇到需要对数据进行分组处理,然后再根据分组结果进行合并的情况。而在使用pandas进行数据处理时,可以通过groupby函数对数据进行分组,然后使用merge函数进行合并操作。在这个过程中,我们有时候需要保留groupby操作之后的列,不对其进行合并,本文将详细介绍如何使用pandas来实现这一目标。
1. 创建示例数据
为了方便演示,我们首先创建一些示例数据。假设有一个销售数据集,包含了产品ID、产品名称、销售数量以及销售额等信息。
import pandas as pd
data = {
'Product_ID': ['A', 'B', 'A', 'B', 'C'],
'Product_Name': ['Apple', 'Banana', 'Apple', 'Banana', 'Orange'],
'Sales_Quantity': [100, 200, 150, 300, 120],
'Sales_Revenue': [2000, 3000, 2500, 4000, 1500]
}
df = pd.DataFrame(data)
print(df)
运行以上代码,我们可以得到如下示例数据:
Product_ID Product_Name Sales_Quantity Sales_Revenue
0 A Apple 100 2000
1 B Banana 200 3000
2 A Apple 150 2500
3 B Banana 300 4000
4 C Orange 120 1500
2. 使用groupby进行分组
接下来,我们可以使用groupby函数对数据进行分组。假设我们按照产品ID进行分组,并计算每个产品的销售数量总和和销售额总和。
grouped = df.groupby('Product_ID').agg({
'Sales_Quantity': 'sum',
'Sales_Revenue': 'sum'
}).reset_index()
print(grouped)
运行以上代码,我们可以得到按产品ID分组后的数据:
Product_ID Sales_Quantity Sales_Revenue
0 A 250 4500
1 B 500 7000
2 C 120 1500
3. 使用merge进行合并
接下来,我们需要将分组后的数据与原始数据进行合并,同时保留产品名称这一列。可以使用merge函数来实现这一目标。
merged = df.merge(grouped, on='Product_ID', suffixes=['', '_Total'])
print(merged)
在以上代码中,我们使用了suffixes参数来区分原始数据中的列和分组后的列。运行以上代码,我们可以得到合并后的数据:
Product_ID Product_Name Sales_Quantity Sales_Revenue Sales_Quantity_Total Sales_Revenue_Total
0 A Apple 100 2000 250 4500
1 B Banana 200 3000 500 7000
2 A Apple 150 2500 250 4500
3 B Banana 300 4000 500 7000
4 C Orange 120 1500 120 1500
可以看到,合并后的数据中保留了产品名称列,并且分组计算的销售数量总和和销售额总和也被保留下来。
通过以上演示,我们学习了如何使用pandas进行数据分组和合并操作,同时保留groupby的列。