Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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—获取一个以时间为索引、以多个日期为列的数据帧_Python_Pandas_Melt - Fatal编程技术网

Python—获取一个以时间为索引、以多个日期为列的数据帧

Python—获取一个以时间为索引、以多个日期为列的数据帧,python,pandas,melt,Python,Pandas,Melt,我想我需要一些关于“融化”功能的帮助 我有一个如下所示的数据帧: 正如您所看到的,当前索引是时间 但是,如果希望实现以下目标: 背后的理由是,我想比较不同日期同一季度的RZS值 我知道我可以使用melt函数,但是我不知道这个函数是如何工作的 from pandas import melt df = pd.DataFrame(index=['00:00:00', '00:15:00'], columns=["2014-12-01","2014-12-02"]) 它创建了数据帧,但我不知道如

我想我需要一些关于“融化”功能的帮助

我有一个如下所示的数据帧:

正如您所看到的,当前索引是时间

但是,如果希望实现以下目标:

背后的理由是,我想比较不同日期同一季度的RZS值

我知道我可以使用melt函数,但是我不知道这个函数是如何工作的

from pandas import melt

df = pd.DataFrame(index=['00:00:00', '00:15:00'], columns=["2014-12-01","2014-12-02"])
它创建了数据帧,但我不知道如何填充它。 我的问题是:

  • 创建包含一天所有96个季度的索引的最简单方法是什么
  • 如何使用melt功能填充新df

  • 非常感谢您。

    您可能正在寻找,这就像是
    熔化的反面。为简单起见,以下代码使用包含96个整数值的“Uhrzeit”列重新创建输入数据帧,表示时间季度:

    import pandas as pd
    import numpy as np
    
    data = {
        'Datum': ['2014-12-01'] * 96 + ['2014-12-02'] * 96,
        'Uhrzeit': range(96) + range(96),
        'RZS': np.random.rand(96*2),
    }
    
    df = pd.DataFrame(data).set_index('Datum')[['Uhrzeit', 'RZS']]
    df.reset_index(inplace=True) # Now this df looks like the input you described
    df = pd.pivot_table(df, values='RZS', rows='Uhrzeit', cols='Datum')
    print df[:10]
    
    输出:

    Datum    2014-12-01  2014-12-02
    Uhrzeit                        
    0          0.864674    0.363400
    1          0.736678    0.925202
    2          0.807088    0.076891
    3          0.007031    0.528020
    4          0.047997    0.216422
    5          0.625339    0.636028
    6          0.115018    0.141142
    7          0.424289    0.101075
    8          0.544412    0.147669
    9          0.151214    0.274959
    
    然后,您可以切掉包含所需“Uhrzeit”的数据帧


    编辑:列
    RZS
    似乎表示为字符串,这导致
    pivot_table
    出现一些问题,因为它希望值列是数字列。假设str
    '1.087,29'
    应被视为浮点值,下面是将该列转换为数字的快速修复方法:

    df = pd.DataFrame({'RZS': ['1.087,29', '1.087.087,28', '1.087.087.087,28']})
    
    def fix(x):
        return x.replace('.', '').replace(',', '.')
    
    df['RZS'] = df['RZS'].apply(fix).astype(float)
    
    # The column RZS now should be of dtype float, and pivot_table should work.
    

    嗨,非常感谢你。但是,我得到以下错误:“没有要聚合的数值类型”。首先,我认为原因是我有逗号分隔的值而不是虚线,即1,23而不是1.23。但是,我将“.”替换为“.”,错误仍然存在……您能检查列
    RZS
    df.dtypes
    )的数据类型吗?它必须是数值的(看这个)。好的,我发现了问题。你能告诉我如何将这个1.087,29(千分之一)转换成这个1087.29吗?我用这种方式尝试了replace函数:replace“.by”和“.by”,但是它抛出了一个空序列…谢谢你,完美!!那么诀窍就是把替换的东西放在一起?!