免责声明:I had posted a related question previously,提示的技巧(对于连接根本不要拆栈)对于该部分很有用,但最后我实际上出于各种原因(包括绘图)想拆栈。
所以这是我的数据:
var1 var2
date status
2003-01-01 foo 69.037500 487.713615
fubar 69.037500 563.257104
2005-01-01 foo 69.833333 479.454816
fubar 69.833333 630.014694
2007-01-01 foo 69.137500 465.405122
请注意,
var2
是特定于(date, status)
的,但是var1
仅特定于给定的日期-两种状态都相同。因此,尽管它是2个状态和2个变量,但实际上只有3个时间序列。我想重新格式化数据框以反映这一点。我想要的输出是
var1 var2_foo var2_fubar
date
2003-01-01 69.037500 487.713615 563.257104
2005-01-01 69.833333 479.454816 630.014694
2007-01-01 69.137500 465.405122 NaN
然后我可以使用相关比例很好地绘制这些
df.plot(secondary_y = ['var1'])
我在另一个问题中部分描述了我尝试获得此结果的方法,但是我尝试的一种特别方法是
pivot
:尝试:透视var2,然后再次合并
df1 = df.reset_index().pivot(index='date', columns='status', values='var2' )
几乎可以正常工作,但是它完全删除了另一列。
status foo fubar
date
2003-01-01 487.713615 563.257104
2005-01-01 479.454816 630.014694
2007-01-01 465.405122 565.706308
2009-01-01 440.538986 465.306299
2011-01-01 420.217694 419.310829
2013-01-01 439.222659 618.119540
这是我后来合并的尝试:
df2 = aggStandard.reset_index(level=1)['var1']
date
2003-01-01 69.037500
2003-01-01 69.037500
2005-01-01 69.833333
2005-01-01 69.833333
2007-01-01 69.137500
Name: var1, dtype: float64
pd.merge(df1,df2)
AttributeError: 'Series' object has no attribute 'columns'
foo.join(bar)
TypeError: Argument 'left' has incorrect type (expected numpy.ndarray, got Index)
最佳答案
好的,我想您已经明白了,但是万一这很有用(并且是@ASGM做的一个变体):
In [67]: df2 = df.unstack('status').iloc[:,1:]
In [68]: df2.columns = [['var1','var2_foo','var2_fubar']]
In [69]: df2
Out[69]:
var1 var2_foo var2_fubar
date
2003-01-01 69.037500 487.713615 563.257104
2005-01-01 69.833333 479.454816 630.014694
2007-01-01 NaN 465.405122 NaN
关于python - 数据透视图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29172976/