免责声明: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 个时间序列。我想重新格式化数据框以反射(reflect)这一点。我想要的输出是
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/