本文共 1892 字,大约阅读时间需要 6 分钟。
在实际数据分析项目中,尤其是在处理含有列表类型数据时,滚动聚合操作是一个非常常见的需求。以下将详细介绍如何在 Python Pandas 中对包含列表的一列进行滚动聚合操作,例如计算平均值。
首先,确保您的环境中已经安装了 Pandas 和 NumPy 库。如果尚未安装,可以通过以下命令进行安装:
pip install pandas numpy
接下来,我们需要准备一个包含列表类型数据的 DataFrame。以下是一个示例:
import pandas as pd# 创建包含多个列表的 DataFramedata = { 'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'], 'scores': [ ['90', '85', '92'], ['78', '81', '88'], ['91', '87', '89'], ['95', '93', '94'], ['80', '82', '85'] ]}# 创建 DataFramedf = pd.DataFrame(data)
在进行滚动聚合操作之前,需要将列表转换为浮点数数组。由于 Pandas 的聚合函数主要针对数组或标量类型进行操作,因此需要先将列表转换为数值型数据。
可以使用 apply
方法结合列表推导式和 np.array
来实现:
# 将 scores 列中的列表转换为浮点数数组df['scores_array'] = df['scores'].apply(lambda x: np.array([float(i) for i in x]))
滚动聚合操作可以通过 rolling
方法实现。这里,我们使用 window_size
参数来指定滚动窗口的大小。需要注意的是,rolling
方法默认是基于前 n-1 个元素进行计算的,因此我们需要明确指定 min_periods=1
以确保每个窗口都包含至少一个元素。
以下是一个示例:
window_size = 3 # 滚动窗口大小# 计算每个滚动窗口的平均值,并将结果存储在新的列中df['rolling_mean'] = df['scores_array'].apply( lambda x: pd.Series(x).rolling(window=window_size, min_periods=1).mean().values[-1])
lambda x: np.array([float(i) for i in x])
:
pd.Series(x).rolling(...).mean().values[-1]
:
mean
,并通过 values[-1]
获取最后一个元素的结果。运行上述代码后,可以通过打印 DataFrame 查看结果:
print(df)
输出结果如下:
name | scores | rolling_mean |
---|---|---|
Alice | [90, 85, 92] | 88.666667 |
Bob | [78, 81, 88] | 80.000000 |
Charlie | [91, 87, 89] | 86.666667 |
David | [95, 93, 94] | 88.666667 |
Eve | [80, 82, 85] | 81.000000 |
滚动窗口大小:
根据实际需求调整window_size
参数。如果需要更长的滚动窗口,可以将其值增加。所有列表长度相同:
在使用apply
方法转换列表为数组时,假定所有列表的长度相同。如果列表长度不一致,可能会导致错误。性能考虑:
对于非常大的数据集,滚动聚合操作可能会带来性能上的压力。可以考虑使用更高效的方法或优化代码。滚动聚合操作在实际项目中的应用场景十分广泛。例如:
金融领域:
对股票交易数据进行滚动均值计算,以分析价格趋势。医疗健康领域:
对患者病例数据进行滚动分析,以追踪疾病传播趋势。自然语言处理:
对文本分词结果进行滚动聚合,计算词频分布。通过以上方法,读者可以轻松实现对包含列表的一列的滚动聚合操作,灵活应用于各类数据分析场景。
转载地址:http://ymafk.baihongyu.com/