使用Pandas实现行值递推更新并为十六进制计数器DataFrame生成时间列
原始DataFrame数据
| counter | frequency | resistance | phase |
|---|---|---|---|
| 0 | 15000.000000 | 698.617126 | -0.745298 |
| 1 | 16000.000000 | 647.001708 | -0.269421 |
| 2 | 17000.000000 | 649.572265 | -0.097540 |
| 3 | 18000.000000 | 665.282775 | 0.008724 |
| 4 | 19000.000000 | 690.836975 | -0.011101 |
| 5 | 20000.000000 | 698.051025 | -0.093241 |
| 6 | 21000.000000 | 737.854003 | -0.182556 |
| 7 | 22000.000000 | 648.586792 | -0.125149 |
| 8 | 23000.000000 | 643.014160 | -0.172503 |
| 9 | 24000.000000 | 634.954223 | -0.126519 |
| a | 25000.000000 | 631.901733 | -0.122870 |
| b | 26000.000000 | 629.401123 | -0.123728 |
| c | 27000.000000 | 629.442016 | -0.156490 |
需求
- 使用Pandas实现
frequency、resistance、phase列按「常量值+前一行对应值」的规则更新; - 新增
time列,初始值t0=0,后续每行时间为前一行时间加采样频率; - 以
time列为X轴,frequency、resistance、phase列为Y轴绘制多曲线图表。
解决方案
步骤1:导入依赖并加载数据
import pandas as pd import matplotlib.pyplot as plt # 加载原始数据 data = { 'counter': ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c'], 'frequency': [15000.0, 16000.0, 17000.0, 18000.0, 19000.0, 20000.0, 21000.0, 22000.0, 23000.0, 24000.0, 25000.0, 26000.0, 27000.0], 'resistance': [698.617126, 647.001708, 649.572265, 665.282775, 690.836975, 698.051025, 737.854003, 648.586792, 643.014160, 634.954223, 631.901733, 629.401123, 629.442016], 'phase': [-0.745298, -0.269421, -0.097540, 0.008724, -0.011101, -0.093241, -0.182556, -0.125149, -0.172503, -0.126519, -0.122870, -0.123728, -0.156490] } df = pd.DataFrame(data)
步骤2:按规则更新列值
自定义常量值delta_val,对指定列从第二行开始执行更新:
# 定义常量值(可根据需求修改) delta_val = 100 cols_to_update = ['frequency', 'resistance', 'phase'] for col in cols_to_update: # 第二行及以后的值 = 前一行对应值 + 常量值 df.loc[1:, col] = df[col].shift(1)[1:] + delta_val
步骤3:新增time列
自定义采样频率sf,生成时间序列:
# 定义采样频率(可根据需求修改) sf = 1 # 初始化time列,第一行为0 df['time'] = 0 # 第二行及以后的值 = 前一行time值 + 采样频率 df.loc[1:, 'time'] = df['time'].shift(1)[1:] + sf
步骤4:绘制多曲线图表
# 设置画布大小 plt.figure(figsize=(10, 6)) # 绘制三条曲线并添加标记 plt.plot(df['time'], df['frequency'], label='Frequency', marker='o') plt.plot(df['time'], df['resistance'], label='Resistance', marker='s') plt.plot(df['time'], df['phase'], label='Phase', marker='^') # 设置图表属性 plt.xlabel('Time') plt.ylabel('Values') plt.title('Time vs Frequency/Resistance/Phase') plt.legend() plt.grid(True) # 显示图表 plt.show()
说明
- 常量值
delta_val和采样频率sf可根据实际业务需求调整; - 若需保留原始列数据,可先复制列再操作,例如
df['frequency_updated'] = df['frequency']; - 绘图样式(颜色、标记、画布尺寸等)可根据需求自定义修改。
内容的提问来源于stack exchange,提问作者user19810659
相关产品推荐
相关产品推荐

