使用 Pivot/melt 转换 pandas 数据

发布于 2025-01-20 20:20:59 字数 818 浏览 0 评论 0原文

我有像

import pandas as pd 

pd.DataFrame({'Date': ["2022-01-01","2022-01-02","2022-01-03"],
         'customer_type': ['A','A','B'],
         'process_A': [2,4,5],
         'process_B': [3,9,6]})

op
      Date         customer_type    process_A   process_B
0     2022-01-01    A               2           3
1     2022-01-02    A               4           9
2     2022-01-03    B               5           6

我希望它以这样的方式转换的数据框,即日期变成列,数据框看起来像这样

  customer_type    Process  2022-01-01  2022-01-02  2022-01-03
0             A  process_A           2           4           0
1             A  process_B           3           9           0
2             B  process_A           0           0           5
3             B  process_B           0           0           6

I have dataframe like

import pandas as pd 

pd.DataFrame({'Date': ["2022-01-01","2022-01-02","2022-01-03"],
         'customer_type': ['A','A','B'],
         'process_A': [2,4,5],
         'process_B': [3,9,6]})

op
      Date         customer_type    process_A   process_B
0     2022-01-01    A               2           3
1     2022-01-02    A               4           9
2     2022-01-03    B               5           6

what I want it to transform in such a way that Date become column and dataframe look like this

  customer_type    Process  2022-01-01  2022-01-02  2022-01-03
0             A  process_A           2           4           0
1             A  process_B           3           9           0
2             B  process_A           0           0           5
3             B  process_B           0           0           6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

以酷 2025-01-27 20:20:59

您可以组合熔体pivot_table

(df
 .melt(id_vars=['Date', 'customer_type'], var_name='Process')
 .pivot_table(index=['customer_type', 'Process'], columns='Date',
              values='value', fill_value=0)
 .reset_index()
 .rename_axis(columns=None)
)

输出:

  customer_type    Process  2022-01-01  2022-01-02  2022-01-03
0             A  process_A           2           4           0
1             A  process_B           3           9           0
2             B  process_A           0           0           5
3             B  process_B           0           0           6

You can combine melt and pivot_table:

(df
 .melt(id_vars=['Date', 'customer_type'], var_name='Process')
 .pivot_table(index=['customer_type', 'Process'], columns='Date',
              values='value', fill_value=0)
 .reset_index()
 .rename_axis(columns=None)
)

output:

  customer_type    Process  2022-01-01  2022-01-02  2022-01-03
0             A  process_A           2           4           0
1             A  process_B           3           9           0
2             B  process_A           0           0           5
3             B  process_B           0           0           6
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文