我有一个Pandas数据框,其中的列是“动态的”(这意味着在从各种数据库中检索数据之前,我不知道列名是什么)。
数据框是一行,看起来像这样:
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
请注意,'89'是数据框中的特定行。
我有以下代码:
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)。
知道我该怎么做吗?
谢谢!
更新1
以下代码行有帮助,但不完全解决问题。
cars_bar_plot = cars_bar_plot.loc[:, (cars_bar_plot >= 3.0).any(axis=0)]
问题在于消除了非预期的列。例如,引用原始数据框,是否可以修改此代码,使其仅删除“Black”列中右侧值小于3.0 的列(假设我们实际上想在“绿色”栏中保留2.0的值?
谢谢!
答案 0 :(得分:0)
假设您只想保留符合条件的行,您可以按照以下方式过滤数据:
df[df.apply(lambda x: x > 0.5).min(axis=1)]
即。只需查看符合条件的所有值,如果至少有一个值没有,请立即删除该行。
答案 1 :(得分:0)
以下是我的问题的答案:
lower_threshold = 3.0
start_column = 5
df = df.loc[start_column:, (df >= lower_threshold).any(axis=0)]