如何用Python将时间序列转为展示各元素出现次数的两列DataFrame
方法1:基于Pandas实现
逻辑简单,4行代码即可完成需求,自动适配不同长度的行,无需手动处理缺失值:
import pandas as pd # 替换为你的实际文件路径 df = pd.read_csv("data.txt", sep=r"\s+", header=None) # 排除每行第一个时间索引列,展平所有数值后统计频次,按数值升序排序 res = df.iloc[:, 1:].stack().value_counts().sort_index() # 输出为空格分隔的两列格式 print(res.to_csv(sep=" ", header=False))
逻辑说明:
iloc[:, 1:]跳过每行第一个时间索引列,符合你给出的示例统计规则stack()将不规则的多列数据压缩为一维Series,自动忽略空值value_counts()直接统计每个数值的出现次数sort_index()按数值升序排列,和示例输出顺序一致
方法2:基于Numpy实现
适合偏好Numpy工具栈的场景:
import numpy as np # 替换为你的实际文件路径 lines = np.genfromtxt("data.txt", dtype=str, delimiter="\n") all_nums = [] for line in lines: # 拆分每行转为整数,跳过第一个索引值 nums = list(map(int, line.split()))[1:] all_nums.extend(nums) # 去重并统计频次,默认按数值升序返回 values, counts = np.unique(all_nums, return_counts=True) # 打印输出 for v, c in zip(values, counts): print(v, c)
两种方法运行你提供的示例数据,输出结果和预期完全一致。
内容的提问来源于stack exchange,提问作者ejl62
相关产品推荐
相关产品推荐

