使用pivot_table 重新排列数据,以便我在列中有a 和b 的组合,在索引中有year。
但是,一旦我们进行了透视,可能会丢失数据。通过使用interpolate 和index 参数,我们用插值填充缺失数据,同时保持与索引值的相对变化成比例。这在索引值没有统一分隔时很重要,例如[2005, 2006, 2008]。如果索引是统一分隔的,那么使用index 不会有坏处,因为它与默认值相同。
d1 = df.pivot_table('usage', 'year', ['a', 'b']).interpolate('index')
d1.index = pd.PeriodIndex(d1.index, freq='A')
d1.plot()
对@jezrael 的 cmets 的回应
观察没有interpolate的数据是什么样子是有益的
d1 = df.pivot_table('usage', 'year', ['a', 'b'])
d1.index = pd.PeriodIndex(d1.index, freq='A')
d1
a a0 a2 b0 b1
b 10104 10104 12011 12011 14102
year
2009 NaN NaN 96.130359 7.658487 NaN
2010 NaN NaN NaN NaN 6.975572
2011 NaN 7.292787 NaN NaN NaN
2012 43.545533 NaN NaN NaN NaN
在这种情况下,我们看不到会发生什么。但我想象有更多的数据,我们会看到稀疏数据之间的NaN 差距。代替前向填充,我们可以按比例填充。
d1 = df.pivot_table('usage', 'year', ['a', 'b']).interpolate('index')
d1.index = pd.PeriodIndex(d1.index, freq='A')
d1
a a0 a2 b0 b1
b 10104 10104 12011 12011 14102
year
2009 NaN NaN 96.130359 7.658487 NaN
2010 NaN NaN 96.130359 7.658487 6.975572
2011 NaN 7.292787 96.130359 7.658487 6.975572
2012 43.545533 7.292787 96.130359 7.658487 6.975572
再一次,这只会在更多数据的情况下显示出它的好处。与这些数据一样,我们只能观察到有限的前向填充。
关于mean
请注意,我使用pivot_table 并且pivot_table 句柄之一是index/column 规范中是否存在重复项。它将使用aggfunc 聚合落入该单元格的所有值。默认情况下,该函数为mean。但是,在这种情况下,根据已提供的数据,没有重复的 a/b/year 组合。因此,没有发生聚合。