You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含二维列表列的Pandas DataFrame转换为新DataFrame

解决方法

步骤1:展开values列并拆分时间戳与数值

先把每行的二维列表拆成独立行,再将每个列表元素拆分为timestamp和对应指标值两列:

import pandas as pd

# 假设原DataFrame名为df
# 把values里的每个子列表拆成单独行
df_exploded = df.explode('values', ignore_index=True)
# 拆分values中的时间戳和数值
df_exploded[['timestamp', 'value']] = pd.DataFrame(df_exploded['values'].tolist(), index=df_exploded.index)
# 删除原values列
df_exploded = df_exploded.drop('values', axis=1)

步骤2:将指标名称转为列名(透视表)

用pivot把name列内容转为列,再让timestamp成为普通列:

# 透视转换
result_df = df_exploded.pivot(index='timestamp', columns='name', values='value').reset_index()
# 清除列名的层级标签
result_df.columns.name = None

完整测试代码

用模拟数据验证效果:

import pandas as pd

# 模拟原DataFrame结构
data = {
    'values': [
        [[1717813770, 1044], [1717813800, 1045]],
        [[1717813770, 8648172], [1717813800, 8648178]],
        [[1717813770, 2705571], [1717813800, 2725355]],
        [[1717813770, 4173437], [1717813800, 4523487]]
    ],
    'name': ['rx_busy', 'rx_reuse', 'rx_bytes', 'tx_bytes']
}
df = pd.DataFrame(data)

# 执行转换流程
df_exploded = df.explode('values', ignore_index=True)
df_exploded[['timestamp', 'value']] = pd.DataFrame(df_exploded['values'].tolist(), index=df_exploded.index)
df_exploded = df_exploded.drop('values', axis=1)

result_df = df_exploded.pivot(index='timestamp', columns='name', values='value').reset_index()
result_df.columns.name = None

print(result_df)

运行后输出结果:

timestamp  rx_busy  rx_reuse  rx_bytes  tx_bytes
0  1717813770     1044   8648172   2705571   4173437
1  1717813800     1045   8648178   2725355   4523487

补充提示

如果原数据存在同一时间戳对应多个相同指标的重复值,可改用pivot_table并指定聚合函数(比如aggfunc='mean')处理。

内容的提问来源于stack exchange,提问作者liw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:25:01