从dictonary中过滤掉数据帧,这样可以满足条件

时间:2017-03-19 20:30:32

标签: pandas dataframe indexing

我有一个包含数据框的字典,名为mini_dfs

我循环遍历dictonary的键和值,其中每个值代表一个数据帧。每个数据框都有一个名为log_return

的列

以下是数据框示例

            Open  High   Low  Close      Volume  log_return   
Date                                                                      
2016-06-21  9.97  9.99  9.54   9.70  11370687.0    0.054010       - 
2016-06-22  9.67  9.67  9.30   9.36   4973859.0   -0.035681          
2016-06-23  9.52  9.75  9.46   9.75   3149880.0    0.040822

`

我想过滤掉log_return列总和大于0的数据帧。 以下代码输出布尔值

for keys, values in mini_dfs.items():
       values.log_return.sum() >0

False True True True False False True True False False False True False False False

但是,我并不完全确定如何优雅地使用布尔过滤,只显示满足我条件的数据帧。

我试过

for keys, values in mini_dfs.items():
    values.loc[values.log_return.sum() >0]

导致keyError: 'the label [False] is not in the [index]' 以及

for keys, values in mini_dfs.items():
    values[values.log_return.sum() >0]

导致

KeyError: False

1 个答案:

答案 0 :(得分:1)

我对数据帧的结构并不完全清楚。他们是单行吗?无论哪种方式,我都创建了一个非常简单的数据帧字典来复制它。我将数据帧存储为键。尝试以下变体:

for i in mini_dfs.values():
    print(i[i['log_return'] > 0])

此结构应返回具有所需条件的每个数据帧行。

作为后续行动:

看起来你几乎就在那里。您可以在其中抛出“if”行,检查总和是否大于零。这有用吗?

for i in mini_dfs.values():
    if i['log_return'].sum() > 0:
        i

这将返回适合总和条件的整个数据帧。这对你有用吗?