Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用stack/melt重塑多索引数据帧_Python_Pandas_Multi Index - Fatal编程技术网

Python 如何使用stack/melt重塑多索引数据帧

Python 如何使用stack/melt重塑多索引数据帧,python,pandas,multi-index,Python,Pandas,Multi Index,*我正在编辑这篇文章,希望能让它更清楚。我试图利用stack和melt的组合将这个示例数据帧转换为下面所需的输出 使用pandas,我将其加载到下面的excel表格中,最终目标是使其整洁且长 df=pd.read('myfile.xlsx) df1= df.stack(level=1) df2=df1.melt(col_level =1) 示例数据帧 良好的客户服务 新鲜食材 很多座位 约翰爸爸 段平均值 约翰爸爸 段平均值 约翰爸爸 段平均值 12/1/2019 70 88 12

*我正在编辑这篇文章,希望能让它更清楚。我试图利用stack和melt的组合将这个示例数据帧转换为下面所需的输出

使用pandas,我将其加载到下面的excel表格中,最终目标是使其整洁且长

 df=pd.read('myfile.xlsx)
  df1= df.stack(level=1)
   df2=df1.melt(col_level =1)
示例数据帧

良好的客户服务 新鲜食材 很多座位 约翰爸爸 段平均值 约翰爸爸 段平均值 约翰爸爸 段平均值 12/1/2019 70 88 12/1/2019 2.2 5.5 12/1/2019 5.2 8.8 12/2/2019 50 78 12/2/2019 6.8 4.4 12/2/2019 5.3 7.8 12/3/2019 60 77 12/3/2019 8.9 2.3 12/3/2019 6.3 5.6 12/4/2019 30 76 12/4/2019 7.3 7.3 12/4/2019 7.9 4.6
假设以下是excel文件的外观:

以下是我将如何使用Pandas实现的步骤:

  • 读取文件,但跳过前两行并删除空列
  • 将DF转换为多索引DF
  • 使用
    for循环熔化并连接DF
  • #步骤1
    df=pd.read\u excel(“raw\u data.xlsx”,skiprows=2,header=None)
    df.dropna(轴=1,在位=真)
    #步骤2(a):创建多索引列名
    col_name=np.array(['date','Papa Johns','Segment Avg'])
    类别=[“良好的客户服务”、“新鲜的原料”、“大量的座位”]
    外部=[范围(3)内的类别中的猫的猫]
    内部=[col for u in range(3)中的col for u name中的col]
    #步骤2(b):将DF更改为多索引
    df.columns=[外部,内部]
    打印(df)
    良好的客户服务新鲜原料\
    日期Papa Johns段平均日期Papa Johns
    0            2019-01-12         70          88        2019-01-12        2.2   
    1            2019-02-12         50          78        2019-02-12        6.8   
    2            2019-03-12         60          77        2019-03-12        8.9   
    3            2019-04-12         30          76        2019-04-12        7.3   
    很多座位
    段平均日期Papa Johns段平均
    0         5.5      2019-01-12        5.2         8.8  
    1         4.4      2019-02-12        5.3         7.8  
    2         2.3      2019-03-12        6.3         5.6  
    3         7.3      2019-04-12        7.9         4.6
    #步骤3
    final_df=pd.DataFrame(列=['date','question','restaurant','score'])#空df
    对于类别中的cat:
    温度df=df.melt(id变量=[(类别,“日期”)],
    value_vars=[(猫叫“Papa Johns”)])
    temp_df.columns=[“日期”、“问题”、“餐厅”、“分数”]
    最终密度=局部混凝土([最终密度,温度密度])
    打印(最终版)
    日期问题餐厅分数
    0 2019-01-12良好的客户服务Papa Johns 70
    1 2019-02-12良好的客户服务Papa Johns 50
    2 2019-03-12良好的客户服务Papa Johns 60
    3 2019-04-12良好的客户服务Papa Johns 30
    0 2019-01-12新鲜配料Papa Johns 2.2
    1 2019-02-12新鲜配料Papa Johns 6.8
    2 2019-03-12新鲜配料Papa Johns 8.9
    3 2019-04-12新鲜配料Papa Johns 7.3
    0 2019-01-12很多座位,爸爸约翰5.2
    1 2019-02-12一批座位Papa Johns 5.3
    2 2019-03-12大量座位Papa Johns 6.3
    3 2019-04-12大量座位Papa Johns 7.9
    
    您能提供创建示例的代码吗?不幸的是,我不能提供,但表格的显示方式与此完全相同。谢谢你基于我的问题,你的回答是正确的,我会给它打上标记,所以我很感激。我应该提供一个更大的样本,因为他们大约有30家不同的餐厅(Papajohns、Applebee’s等)——所以这有点复杂,但我认为我可以从这里构建出来。谢谢