Python 根据数据帧的日期时间索引转换数据帧
我有以下数据帧:Python 根据数据帧的日期时间索引转换数据帧,python,pandas,datetime,Python,Pandas,Datetime,我有以下数据帧: date = ['2014-02-03 23:00:00','2015-02-03 23:30:00','2015-02-04 00:00:00','2016-02-04 01:30:00'] value = [33.24 , 31.71 , 34.39 , 34.49 ] df = pd.DataFrame({'value':value,'index':date}) df.index = pd.to_datetime(df['index'],format='%Y-
date = ['2014-02-03 23:00:00','2015-02-03 23:30:00','2015-02-04 00:00:00','2016-02-04 01:30:00']
value = [33.24 , 31.71 , 34.39 , 34.49 ]
df = pd.DataFrame({'value':value,'index':date})
df.index = pd.to_datetime(df['index'],format='%Y-%m-%d %H:%M')
df.drop(['index'],axis=1,inplace=True)
print(df.head())
value
index
2014-02-03 23:00:00 33.24
2015-02-03 23:30:00 31.71
2015-02-04 00:00:00 34.39
2016-02-04 01:30:00 34.49
我希望有效地“透视”数据帧,因此必须有以下结果:
2014 2015 2016
index
2014-02-03 23:00:00 33.24
2015-02-03 23:30:00 31.71
2015-02-04 00:00:00 34.39
2016-02-04 01:30:00 34.49
或者更好地“崩溃”上一个:
2014 2015 2016
index
0 33.24 31.71 34.39
1 34.39
我基本上想每年创建一个专栏。你知道如何有效地做到这一点吗
非常感谢,您可以:
pd.pivot(df.index,df.index.year, df.value)
index 2014 2015 2016
index
2014-02-03 23:00:00 33.24 NaN NaN
2015-02-03 23:30:00 NaN 31.71 NaN
2015-02-04 00:00:00 NaN 34.39 NaN
2016-02-04 01:30:00 NaN NaN 34.49
# If you want blank strings instead of `NaN`:
# pd.pivot(df.index,df.index.year, df.value).fillna('')
# index 2014 2015 2016
# index
# 2014-02-03 23:00:00 33.24
# 2015-02-03 23:30:00 31.71
# 2015-02-04 00:00:00 34.39
# 2016-02-04 01:30:00 34.49
关于您的编辑,要“colapse”这个,您可以使用np.sort
并创建一个新的数据框(如果顺序不重要)。但不确定这是否是最有效的方法
pd.DataFrame(np.sort(pd.pivot(df.index,df.index.year, df.value),0)).dropna(how='all')
0 1 2
0 33.24 31.71 34.49
1 NaN 34.39 NaN
谢谢是否有可能基本上“折叠”数据框架以去除大部分NaN值,并获得类似smth的2014年2015年2016年指数0 33.24 31.71 34.39 1 NaN 34.39 Nasorry,如果评论中没有换行符,就无法说出你的意思。你能在问题中以编辑的形式发布你想要的输出吗?就去掉
NaN
s而言,fillna
还不够吗?