2016-10-30 19 views
0

「ダイナミック」な列のPandasデータフレームがあります。これは、さまざまなデータベースからデータを取得するまでは列名がわからないことを意味します。サブセットパンダのデータフレームの値に基づいて

データフレームは、単一の列であり、このようなものになります「89」は、データフレーム内の特定の行であることを

Make Date  Red  Blue  Green  Black  Yellow  Pink  Silver 
89 BMW 2016-10-28 300.0 240.0 2.0  500.0  1.0  1.0  750.0 

注意。

私は、次のコードを持っている:

cars_bar_plot = df_cars.loc[(df_cars.Make == 'BMW') & (df_cars.Date == as_of_date)] 

cars_bar_plot = cars_bar_plot.replace(0, value=np.nan) 

cars_bar_plot = cars_bar_plot.dropna(axis=1, how='all') 

これは、を上記単一行のデータフレームを作成するために私を助けることに正常に動作しますが、各列の値のいくつかは非常に小さい(例えば1.0と2.0)、他の値と比較して、私はMatplotlibで作成している横棒グラフを歪ませています。私はいくつかの最小閾値(例えば3.0)より小さい数を取り除きたいと思っています。

どうすればいいですか?

ありがとうございます!

UPDATE 1

次のコード行は役立ちますが、はない完全に問題を解決しません。

cars_bar_plot = cars_bar_plot.loc[:, (cars_bar_plot >= 3.0).any(axis=0)] 

問題は、排除意図しない列だということです。たとえば、元のデータフレームを参照すると、このコードを変更して、3.未満の値の列を「ブラック」列の右側に削除するだけです(実際には「グリーン」欄の値は2.0)?

ありがとうございます!

+0

あなたは、列や行を取り除きたいですか?別々の棒グラフに各列をプロットしてみてください。 – amyrit

+0

@amyrit - 私は列を取り除きたいです(なぜなら、私は先頭に1行しかないからです)。たとえば、データフレームに約30列あります。しかし、列の中には無視できる値しかないので、それらを取り除き、特定のしきい値以上の値しか持たないようにしたい。 – equanimity

答えて

0

は私の質問への答えです:

lower_threshold = 3.0 
start_column = 5 
df = df.loc[start_column:, (df >= lower_threshold).any(axis=0)] 
0

あなたはあなたにこのようなデータをフィルタリングすることができ、あなただけの条件に一致する行を維持したいと仮定すると:

df[df.apply(lambda x: x > 0.5).min(axis=1)] 

すなわち、単にあなたの条件に一致するすべての値を見て、少なくとも一つあれば、すぐに行を削除しますしません。ここで

+0

実際のデータフレームには約30の列があり、一部の列には設定したいしきい値(たとえば3.0または2.0)よりも正当な値があります。あなたのソリューションは**すべての**列に適用されますか、**特定の**列のみに適用されますか?ありがとう! – equanimity

+0

私はこのコードを適用しました: 'cars_bar_plot [cars_bar_plot.apply(lambda x:x> 1.0).min(axis = 1)]'私はこれを適用する間違いをしましたか? – equanimity

関連する問題