【问题标题】:Using Pivot_Table with Pandas将 Pivot_Table 与 Pandas 一起使用
【发布时间】:2020-09-17 15:18:20
【问题描述】:

我在 Python 3.7 中使用 Pandas。我有一个包含 8 列的 csv 文件,我需要旋转第 5、6、7 和 8 列。我像这样旋转它们:

pivot = pd.pivot_table (csv_file, 
                        values = ["column 5", "column 6" , "column 7","column 8"],
                        index = "ID",
                        aggfunc = np.mean,
                        dropna = False)

然后我将其保存为 csv。问题是保存的 csv 文件只有第 5、6、7 和 8 列。我希望它也保留前 4 列。我试图找到解决方法,例如从 csv_file 中删除最后 4 列,然后在它们被旋转后将它们添加回来。我尝试过连接、加入和合并,但在旋转后重新创建包含所有 8 列的 csv 文件没有成功。如果有人对如何执行此任务有任何见解或知识,我将不胜感激

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我没有你的 csv_file 作为输入,但我试图做这样的事情。看看这是不是你要找的。​​p>

    c1 = [i for i in range(10)]
    c2 = [i for i in range(10)]
    c3 = [str(i) for i in range (10)]
    c4 = [str(i) for i in range (10,0,-1)]
    c5 = ['test']*10
    
    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'column1':c1,'column2':c2,
                       'column3':c3,'column4':c4,'column5':c5,})
    
    df_pivot=pd.pivot_table(df,
                      values=['column1', 'column2'], 
                      index=["column3","column4","column5"], 
                      aggfunc={'column1':[np.mean,max,min],'column2':np.sum})
    
    #df_pivot.columns = df_pivot.columns.get_level_values(1)
    
    df_pivot.columns = ['_'.join(col).strip() for col in df_pivot.columns.values]
    
    print(df)
    print(df_pivot)
    

    输出如下:

    初始数据框:

       column1  column2 column3 column4 column5
    0        0        0       0      10    test
    1        1        1       1       9    test
    2        2        2       2       8    test
    3        3        3       3       7    test
    4        4        4       4       6    test
    5        5        5       5       5    test
    6        6        6       6       4    test
    7        7        7       7       3    test
    8        8        8       8       2    test
    9        9        9       9       1    test
    

    透视数据框

                             column1_max  column1_mean  column1_min  column2_sum
    column3 column4 column5                                                     
    0       10      test               0             0            0            0
    1       9       test               1             1            1            1
    2       8       test               2             2            2            2
    3       7       test               3             3            3            3
    4       6       test               4             4            4            4
    5       5       test               5             5            5            5
    6       4       test               6             6            6            6
    7       3       test               7             7            7            7
    8       2       test               8             8            8            8
    9       1       test               9             9            9            9
    

    我有几分钟的时间来处理您的问题陈述。您需要标出要写入文件的列。这就是我所做的。

    写入 CSV 文件

    df_pivot.to_csv('out.csv', index_label=df_pivot.columns.name)
    

    它的输出将如下所示。我希望这就是您正在寻找的。​​p>

    column3,column4,column5,column1_max,column1_mean,column1_min,column2_sum
    0,10,test,0,0,0,0
    1,9,test,1,1,1,1
    2,8,test,2,2,2,2
    3,7,test,3,3,3,3
    4,6,test,4,4,4,4
    5,5,test,5,5,5,5
    6,4,test,6,6,6,6
    7,3,test,7,7,7,7
    8,2,test,8,8,8,8
    9,1,test,9,9,9,9
    

    写入 Excel 文件

    import openpyxl
    
    with pd.ExcelWriter('myfile.xlsx',engine="openpyxl") as writer:
        df_pivot.to_excel(writer, sheet_name='Sheet1',columns=df_pivot.columns)
    

    我得到的答案如下:

    【讨论】:

    • 看起来这有助于您解决问题。如果是这样,请阅读当有人answers您的问题时该怎么做。
    • 不幸的是,这对我不起作用。我更改了代码以模仿您的建议。我不知道您为什么要加入下划线,但是无论有没有该行,保存的 csv 文件仍然只包含最后 4 列。
    • 让我编写代码将数据也推送到 csv 文件中并提供给您。
    • 看看这对你有没有帮助。 pbpython.com/pandas-pivot-report.html
    • 这导致了我正在处理的相同问题。似乎唯一的区别是索引是在值之前传入的。
    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2020-01-17
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多