我有一个包含数据框的字典,名为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
答案 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
这将返回适合总和条件的整个数据帧。这对你有用吗?