Python 如何用一些复杂的数据重新排列Excel数据集?

Python 如何用一些复杂的数据重新排列Excel数据集?,python,Python,我对向stack overflow提问很陌生。如果我错过了什么,请告诉我 我正在尝试重新排列excel中的一些数据,如下所示 喜欢: 我已经在堆栈溢出中尝试了一个 我只需要在上面的答案旁边再添加一列,但是用我简短的python知识找不到答案 任何人都可以建议一种比上述链接更复杂的重新排列方式?您必须对数据进行一点转换,才能得到想要的结果,但我的解决方案是: 1.进口 import pandas as pd import numpy as np 从数据中删除合并标题(“预算和实际”)。您可能

我对向stack overflow提问很陌生。如果我错过了什么,请告诉我

我正在尝试重新排列excel中的一些数据,如下所示

喜欢:

我已经在堆栈溢出中尝试了一个

我只需要在上面的答案旁边再添加一列,但是用我简短的python知识找不到答案


任何人都可以建议一种比上述链接更复杂的重新排列方式?

您必须对数据进行一点转换,才能得到想要的结果,但我的解决方案是:

1.进口

import pandas as pd
import numpy as np
  • 从数据中删除合并标题(“预算和实际”)。您可能希望将列重命名为2020年1月31日实际值和2020年1月31日预算值。否则,如果您具有相同的列名,Pandas将为您带来具有诸如“.1”之类的区分符的列。下面的示例数据仅包含两列,用于演示

     Item    1/31/2020   2/29/2020   1/31/2020.1 2/29/2020.1
    0  A     0.01        0.02        0.03        0.04
    1  B     0.20        0.30        0.40        0.50
    2  C     0.33        0.34        0.35        0.36
    
  • 3.为实际值和预算创建两个单独的数据集

    #item name and all budget columns from your dataset 
    df_budget = df.iloc[:, 0:12]
    
    # item name and the actuals columns
    df_actuals = df.iloc[:, [0,13,14,15,16,17,18,19,20,21,22,22,24,25]] 
    
    4.更正列的名称以删除区分符“.1”并反映您的日期

    df_actuals.columns = ['Item','1/31/2020','2/29/2020' so far so on...]
    
    5.转换行中的日期列

    df_actuals = df_actuals.melt(id_vars=['Item'], value_vars=['1/31/2020', '2/29/2020'], var_name = 'Date', value_name='Actual')
    df_budget = df_budget.melt(id_vars=['Item'], value_vars=['1/31/2020', '2/29/2020'], var_name = 'Date', value_name='Budget')
    
    在这一点上你应该看到类似的东西

        Item    Date    Actual
     0  A   1/31/2020   0.01
     1  B   1/31/2020   0.20
    
    
        Item    Date    Budget
    0   A   1/31/2020   0.03
    1   B   1/31/2020   0.40
    
    6.合并两个数据集

    pd.merge(df_actuals, df_budget, on=['Item', 'Date'], sort=True)
    
    结果:

        Item    Date    Actual  Budget
    0   A   1/31/2020   0.01    0.03
    1   A   2/29/2020   0.02    0.04
    2   B   1/31/2020   0.20    0.40
    3   B   2/29/2020   0.30    0.50
    4   C   1/31/2020   0.33    0.35
    5   C   2/29/2020   0.34    0.36
    

    为了得到想要的结果,您必须对数据进行一点转换,但以下是我的解决方案:

    1.进口

    import pandas as pd
    import numpy as np
    
  • 从数据中删除合并标题(“预算和实际”)。您可能希望将列重命名为2020年1月31日实际值和2020年1月31日预算值。否则,如果您具有相同的列名,Pandas将为您带来具有诸如“.1”之类的区分符的列。下面的示例数据仅包含两列,用于演示

     Item    1/31/2020   2/29/2020   1/31/2020.1 2/29/2020.1
    0  A     0.01        0.02        0.03        0.04
    1  B     0.20        0.30        0.40        0.50
    2  C     0.33        0.34        0.35        0.36
    
  • 3.为实际值和预算创建两个单独的数据集

    #item name and all budget columns from your dataset 
    df_budget = df.iloc[:, 0:12]
    
    # item name and the actuals columns
    df_actuals = df.iloc[:, [0,13,14,15,16,17,18,19,20,21,22,22,24,25]] 
    
    4.更正列的名称以删除区分符“.1”并反映您的日期

    df_actuals.columns = ['Item','1/31/2020','2/29/2020' so far so on...]
    
    5.转换行中的日期列

    df_actuals = df_actuals.melt(id_vars=['Item'], value_vars=['1/31/2020', '2/29/2020'], var_name = 'Date', value_name='Actual')
    df_budget = df_budget.melt(id_vars=['Item'], value_vars=['1/31/2020', '2/29/2020'], var_name = 'Date', value_name='Budget')
    
    在这一点上你应该看到类似的东西

        Item    Date    Actual
     0  A   1/31/2020   0.01
     1  B   1/31/2020   0.20
    
    
        Item    Date    Budget
    0   A   1/31/2020   0.03
    1   B   1/31/2020   0.40
    
    6.合并两个数据集

    pd.merge(df_actuals, df_budget, on=['Item', 'Date'], sort=True)
    
    结果:

        Item    Date    Actual  Budget
    0   A   1/31/2020   0.01    0.03
    1   A   2/29/2020   0.02    0.04
    2   B   1/31/2020   0.20    0.40
    3   B   2/29/2020   0.30    0.50
    4   C   1/31/2020   0.33    0.35
    5   C   2/29/2020   0.34    0.36
    

    请将实际数据包含在代码中,而不是图像中。请考虑更清楚地包括数据和期望输出的最小示例。它使人们更容易帮助你在代码中包含实际的数据,而不是图像。考虑清楚地包括你的数据和你想要的输出的一个最小的例子。这使人们更容易帮助你这太棒了!非常感谢你!这太棒了!非常感谢你!