如何使用 Pandas 的 agg 函数来进行去重统计
在数据分析中,经常需要对数据集进行聚合操作以提取有用的统计信息。Pandas 是 Python 中一个强大的数据处理库,它提供了丰富的数据结构和数据分析工具。本文将详细介绍如何使用 Pandas 的 agg
函数来进行去重统计。
1. 理解 Pandas DataFrame
在深入了解如何使用 agg
函数之前,我们首先需要理解 Pandas 中的基本数据结构——DataFrame。DataFrame 是一个二维标签数据结构,你可以把它想象成一个表格,但是它的功能远不止于此。
示例代码 1:创建 DataFrame
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
print(df)
Output:
2. 使用 agg
函数进行聚合操作
agg
函数是 Pandas 中用于聚合操作的一个非常强大的工具。它可以让你轻松地对数据集进行多种统计计算。
示例代码 2:基本的聚合操作
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
result = df.agg({'Visits': ['sum', 'min', 'max']})
print(result)
Output:
3. 实现去重统计(Distinct Count)
去重统计是指对数据集中某一列的不同值进行计数。在 Pandas 中,我们可以结合 agg
函数和 nunique
方法来实现这一功能。
示例代码 3:使用 nunique
进行去重统计
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
distinct_count = df.agg({'User': pd.Series.nunique})
print(distinct_count)
Output:
4. 复杂的聚合操作
在实际的数据分析任务中,我们可能需要对数据进行更复杂的聚合操作,比如同时计算多个统计量。
示例代码 4:同时计算总和和去重统计
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
complex_agg = df.agg({'Visits': ['sum', 'mean'], 'User': pd.Series.nunique})
print(complex_agg)
Output:
5. 分组后的去重统计
在某些情况下,我们需要根据某些列的值将数据分组,然后在每个组内进行去重统计。
示例代码 5:分组后的去重统计
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
grouped_distinct_count = df.groupby('Website').agg({'User': pd.Series.nunique})
print(grouped_distinct_count)
Output:
6. 多级分组聚合
Pandas 允许进行多级分组聚合,这在处理复杂数据集时非常有用。
示例代码 6:多级分组聚合
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
multi_grouped_agg = df.groupby(['Website', 'User']).agg({'Visits': ['sum', 'mean']})
print(multi_grouped_agg)
Output:
7. 使用自定义函数进行聚合
除了使用内置的聚合函数外,Pandas 还允许你定义自己的聚合函数来进行更具体的数据处理。
示例代码 7:使用自定义函数进行聚合
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
def max_minus_min(x):
return x.max() - x.min()
custom_agg = df.agg({'Visits': max_minus_min})
print(custom_agg)
Output:
8. 聚合后的数据过滤
有时候我们需要对聚合后的结果进行过滤,以便得到符合特定条件的数据。
示例代码 8:聚合后的数据过滤
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
filtered_agg = df.groupby('User').agg({'Visits': 'sum'}).query('Visits > 3')
print(filtered_agg)
Output:
9. 聚合与转换结合使用
在某些情况下,我们可能需要在聚合操作后对数据进行转换,以便进行进一步的分析。
示例代码 9:聚合与转换结合使用
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
transformed_agg = df.groupby('User').agg({'Visits': 'sum'}).transform(lambda x: x / x.sum())
print(transformed_agg)
Output:
10. 结合多个聚合操作
在复杂的数据分析任务中,我们可能需要结合使用多个聚合操作来得到所需的结果。
示例代码 10:结合多个聚合操作
import pandas as pd
data = {
'Website': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'User': ['Alice', 'Bob', 'Alice'],
'Visits': [1, 2, 3]
}
df = pd.DataFrame(data)
combined_agg = df.agg({'Visits': ['sum', 'mean'], 'User': [pd.Series.nunique, 'count']})
print(combined_agg)
Output:
以上是使用 Pandas 进行去重统计的一些基本方法和高级技巧。通过这些示例代码,你可以看到 Pandas 在数据处理和分析方面的强大功能。