基于某些行值的子集Pandas数据帧

时间:2016-10-30 21:57:47

标签: python pandas subset

我有一个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的值?

谢谢!

2 个答案:

答案 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)]