如何用Pandas对DataFrame中字典列表的size值按时间戳求和?
使用Pandas对DataFrame中嵌套字典的size值按时间戳求和
你这个需求很常见,用Pandas可以轻松实现,给你两种实用的方案,按需选择就行:
方案一:简洁版(适合中小数据集)
直接用apply配合生成器表达式,一行代码就能搞定:
import pandas as pd # 假设你的原始DataFrame名为df df['asks'] = df['asks'].apply(lambda row: sum(int(item['size']) for item in row))
原理很简单:对asks列的每一行(也就是每个包含字典的列表),遍历里面的每个字典,把size字段转成整数后累加求和,直接替换原列就得到目标结果了。
方案二:高效版(适合大数据集)
如果你的数据量比较大,apply的性能可能不够理想,推荐用explode+json_normalize的组合,先拆分再聚合:
# 第一步:把每个列表拆成单独的行 exploded_df = df.explode('asks') # 第二步:把字典格式的内容拆成独立列,并关联原时间戳 normalized_df = pd.json_normalize(exploded_df['asks']).join(exploded_df['timestamp']) # 第三步:按时间戳分组,对size求和,最后整理格式 result_df = normalized_df.groupby('timestamp')['size'].sum().astype(int).reset_index(name='asks')
这种方法通过拆分数据结构,利用Pandas的矢量化操作提升性能,最后分组求和后得到的result_df就是你想要的格式。
两种方法都能得到你需要的结果,小数据用方案一够简洁,大数据用方案二更高效~
内容的提问来源于stack exchange,提问作者MathMan 99
相关产品推荐
相关产品推荐

