2017-04-13 5 views
0

私はAXLES列を含むデータフレームを持っています。 AXLES列には、常に次の値のいずれかがあります。[3, 4, 5, ,6 ,7, 8]。フィルタを実行し、次にインデックスを変更し、次にgroupby、次に再サンプリングし、最後にデータフレームをアンスタックします(下のコードを参照)。Pandasはリサンプルとアンスタックの後に列を追加します

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を持つすべての行が除外されています。最終的なデータフレームにこの列を残しておくにはどうすればいいですか?私は(データフレームに追加し、「0」の値を持つ欠落している「3」の列)を以下のように最後のデータフレームを取得しようとしています:

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

すべてのフィルタリング後にドロップされた列を維持することができない場合、値が0の[3, 4, 5, 6, 7, 8]列(見つからない場合)を最終的なデータフレームに追加するにはどうすればよいですか?

ありがとうございます!

+0

元のデータフレームを見ることなく、答えが少し難しいですが、値が100より小さい値を除外している場合、値が0の列はなぜ存在すると思いますか? – pshep123

+0

私は、フィルタリングされたデータを使用して毎月の棒グラフを準備する必要があります。数か月のうちにカラムの1つがドロップされた場合、それがプロット関数を駄目にするので、データフレームのサイズを一定に保つ必要があります。私はすべてのフィルタリングが完了したら、欠落している列でデータフレームを再作成する必要があると思います。 – marillion

+0

私の答えは以下のとおりですか? – pshep123

答えて

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) 
関連する問題