Python—获取一个以时间为索引、以多个日期为列的数据帧
我想我需要一些关于“融化”功能的帮助 我有一个如下所示的数据帧: 正如您所看到的,当前索引是时间 但是,如果希望实现以下目标: 背后的理由是,我想比较不同日期同一季度的RZS值 我知道我可以使用melt函数,但是我不知道这个函数是如何工作的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"]) 它创建了数据帧,但我不知道如
from pandas import melt
df = pd.DataFrame(index=['00:00:00', '00:15:00'], columns=["2014-12-01","2014-12-02"])
它创建了数据帧,但我不知道如何填充它。
我的问题是:
非常感谢您。您可能正在寻找,这就像是
熔化的反面。为简单起见,以下代码使用包含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”,但是它抛出了一个空序列…谢谢你,完美!!那么诀窍就是把替换的东西放在一起?!