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

使用Python将DataFrame转换为指定格式的嵌套列表矩阵

解决DataFrame转指定嵌套列表矩阵的问题

原始DataFrame

product1product2time
AppleApple0
AppleMango20
AppleOrange24
MangoApple30
MangoMango0
MangoOrange24
orangeApple12
orangeorange0
orangemango24

需求

将上述DataFrame转换为指定格式的嵌套列表矩阵:

[[0,24,20],[12,0,24],[30,24,0]]

尝试的代码(未得到预期结果)

df.groupby(['product1','product2'])['time'].apply(list)

正确实现方法

问题出在两个核心点:一是原数据中产品名称大小写不统一(比如Orange和orange、Mango和mango),导致分组/透视时出现无效分类;二是groupby仅能生成多级索引的Series,无法直接输出目标矩阵结构。

步骤1:统一产品名称大小写

先把product1和product2列的名称格式统一(这里用首字母大写,也可选择全小写/全大写,只要保持一致即可):

df['product1'] = df['product1'].str.capitalize()
df['product2'] = df['product2'].str.capitalize()

步骤2:透视表重塑数据

使用pivot方法将数据转换为宽表,行对应product1,列对应product2,值为time:

pivot_df = df.pivot(index='product1', columns='product2', values='time')

步骤3:调整行列顺序并转换为嵌套列表

根据期望输出的结构,指定行列的排序规则,再转换为嵌套列表:

# 匹配目标矩阵的行列顺序
target_order = ['Apple', 'Orange', 'Mango']
pivot_df = pivot_df.loc[target_order, target_order]

# 转换为目标格式
result = pivot_df.values.tolist()
print(result)

执行后输出结果即为:

[[0, 24, 20], [12, 0, 24], [30, 24, 0]]

完整可运行代码

import pandas as pd

# 构建原始DataFrame
data = [
    ['Apple', 'Apple', 0],
    ['Apple', 'Mango', 20],
    ['Apple', 'Orange', 24],
    ['Mango', 'Apple', 30],
    ['Mango', 'Mango', 0],
    ['Mango', 'Orange', 24],
    ['orange', 'Apple', 12],
    ['orange', 'orange', 0],
    ['orange', 'mango', 24]
]
df = pd.DataFrame(data, columns=['product1', 'product2', 'time'])

# 统一大小写
df['product1'] = df['product1'].str.capitalize()
df['product2'] = df['product2'].str.capitalize()

# 透视+调整顺序+转列表
target_order = ['Apple', 'Orange', 'Mango']
pivot_df = df.pivot(index='product1', columns='product2', values='time').loc[target_order, target_order]
result = pivot_df.values.tolist()

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:09:28