代码之家  ›  专栏  ›  技术社区  ›  Niner

如何使用Pandas DataFrame按日期和项目作为列标题汇总计数

  •  1
  • Niner  · 技术社区  · 2 周前

    给定Pandas中的以下DataFrame:

    import pandas as pd
    df = pd.DataFrame(
        {
            "Date": [
                pd.Timestamp("2000-01-02"), 
                pd.Timestamp("2000-01-02"), 
                pd.Timestamp("2000-01-05"), 
                pd.Timestamp("2000-01-06"), 
                pd.Timestamp("2000-01-06"), 
                pd.Timestamp("2000-01-06") 
            ],
            "Item": ["A", "A", "B", "C", "C", "C"]
        }
    )
    

    其产生以下DataFrame:

        Date        Item
    0   2000-01-02  A
    1   2000-01-02  A
    2   2000-01-05  B
    3   2000-01-06  C
    4   2000-01-06  C
    5   2000-01-06  C
    

    如何按日期将数据汇总,并将Item作为列标题,如以下格式所示?

    Date        A   B   C
    2000-01-02  2   0   0
    2000-01-05  0   1   0
    2000-01-06  0   0   3
    

    我试过了

    pivot_df = df.pivot_table(index='Date', columns='Item', aggfunc=len, fill_value=0)
    

    但这给了我:

    Item        A   B   C
    Date            
    2000-01-02  2   0   0
    2000-01-05  0   1   0
    2000-01-06  0   0   3
    

    我不希望列中有“项目”,只希望列中包含“日期A B C”。

    2 回复  |  直到 2 周前
        1
  •  2
  •   Nick    2 周前

    你需要做两件事:

    1. 重置列索引名称(以删除 Item )
    2. 重置数据帧索引(以使 Date 一列)
    pivot_df.columns.name = ''
    pivot_df = pivot_df.reset_index()
    

    输出

            Date  A  B  C
    0 2000-01-02  2  0  0
    1 2000-01-05  0  1  0
    2 2000-01-06  0  0  3
    
        2
  •  1
  •   Muhammed Samed Özmen    2 周前
    pivot_df = pivot_df.reset_index()
    pivot_df.columns = ['Date'] + pivot_df.columns[1:].tolist()
    

    输出如下所示。

            Date  A  B  C
    0 2000-01-02  2  0  0
    1 2000-01-05  0  1  0
    2 2000-01-06  0  0  3