我有以下数据框:
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
我基本上想每年创建一列。您知道如何有效地做到这一点吗?
非常感谢,
答案 0 :(得分:1)
您可以这样做:
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
关于您的编辑,要“关闭”此内容,可以使用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