我有一个数据帧,如下所示:

Code    Description Date    Quantity
dasd2132    dummy 1 2023-06 {'prev_value': 0.0, 'new_value': 90.0}
312dasda    dummy 2 2023-07 0
das432cs    dummy 3 2023-08 0
31231dsa    dummy 4 2023-09 0

它可以在其列中包含一个作为值的字典.

我希望透视此数据框,并将日期列值显示为列标题,将数量显示为列值:

Code    Description 2023-06                                 2023-07 2023-08 2023-09
dasd2132    dummy 1 {'prev_value': 0.0, 'new_value': 90.0}  0   0   0

有没有办法在Python语言中做到这一点?

请建议一个优化的解决方案. 谢谢.

我try 使用PIVOT_TABLE完成此操作:

pivoted_df = pd.pivot_table(df, index = ['Code', 'Description'], values = 'Quantity', columns = 'Date', sort = False)

但是,这会给出错误:TypeError: unhashable type: 'dict'

推荐答案

使用定制的pivot:

# identify non numeric values
m = pd.to_numeric(df['Quantity'], errors='coerce').isna()

out = (df  # keep only first Code/Description
   .assign(Code=lambda d: d['Code'].where(m).ffill(),
           Description=lambda d: d['Description'].where(m).ffill(),
           cols=lambda d: d.groupby(m.cumsum()).cumcount(),
          )
   .pivot(index=['Code', 'Description'], columns=['Date', 'cols'],
          values='Quantity')
   .droplevel(1, axis=1).reset_index().rename_axis(columns=None)
)

输出:

       Code Description                                 2023-06 2023-06 2023-06 2023-06
0  dasd2132     dummy 1  {'prev_value': 0.0, 'new_value': 90.0}       0       0       0

Python相关问答推荐

DuckDB将蜂巢分区插入拼花文件

使用GEKKO在简单DTE系统中进行一致初始化

如何在BeautifulSoup中链接Find()方法并处理无?

当多个值具有相同模式时返回空

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Django mysql图标不适用于小 case

重新匹配{ }中包含的文本,其中文本可能包含{{var}

如何在Python中并行化以下搜索?

在Mac上安装ipython

SQLAlchemy Like ALL ORM analog

从嵌套的yaml创建一个嵌套字符串,后面跟着点

在Python中使用if else或使用regex将二进制数据如111转换为001""

下三角形掩码与seaborn clustermap bug

判断Python操作:如何从字面上得到所有decorator ?

使用SeleniumBase保存和加载Cookie时出现问题

使用python playwright从 Select 子菜单中 Select 值

删除特定列后的所有列

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

遍历列表列表,然后创建数据帧