Pandas在重新取样和取消堆叠后添加列

时间:2017-04-13 23:04:06

标签: python pandas dataframe

我有一个包含AXLES列的数据框。 AXLES列始终包含以下值之一:[3, 4, 5, ,6 ,7, 8]。我运行一个过滤器,然后更改索引,然后分组,然后重新采样,最后取消堆栈数据帧,如下面的代码所示。

resamp = df[(df.GVW > 100) & (df.AXLES.isin([3,4,5,6,7,8]))].set_index('TIMESTAMP').groupby('AXLES').resample('M', how='count').CLASS
dfTemp = resamp.unstack(0)
dfTemp.index = [ts.strftime('%b 20%y') for ts in dfTemp.index]

这给了我以下数据框,没问题。

AXLES         4   5   6   7  8
Jul 2016    191 1582 212 183 6

但是,问题在于:由于我应用了dfWIM.GVW > 100过滤,所有AXLES = 3的行都会被过滤掉。我怎样才能在最终的数据框中保留这个删除的列?我正在尝试获取最终数据框如下(缺少" 3"列" 0"值添加到数据帧):

AXLES       3   4    5   6   7  8
Jul 2016    0  191 1582 212 183 6

如果在完成所有过滤后无法保留已删除的列,如何将值{0的任何[3, 4, 5, 6, 7, 8]列(如果缺少)添加到最终数据帧?

非常感谢!

1 个答案:

答案 0 :(得分:0)

这只是你问题最后一部分的答案,而不是一个完整的答案:

pythonically找到缺少的列:

missing = list(set([3,4,5,6,7,8]) - set(df.columns.tolist()))

选项1(python):

for x in missing: df[x] = 0

选项2(熊猫):

df = df.append(pd.DataFrame(columns = [missing])).fillna(0)