cos*_*tot 7 python indexing panel dataframe pandas
我有一个Pandas面板,其中包含许多具有相同行/列标签的DataFrame.我想创建一个包含DataFrames的新面板,该面板基于几列来满足某些条件.
数据帧和行很容易:比如我有一个df,zHe_compare.我可以得到合适的行:
zHe_compare[(zHe_compare['zHe_calc'] > 100) & (zHe_compare['zHe_med'] > 100) | ((zHe_obs_lo_2s <=zHe_compare['zHe_calc']) & (zHe_compare['zHe_calc'] <= zHe_obs_hi_2s))]
Run Code Online (Sandbox Code Playgroud)
但我该怎么做(伪代码,简化布尔):
good_results_panel = results_panel[ all_dataframes[ sum ('zHe_calc' < 'zHe_obs') > min_num ] ]
Run Code Online (Sandbox Code Playgroud)
我知道内部布尔部分,但是如何为面板中的每个数据帧指定它?因为我需要每个df的多个列,所以我没有使用panel.minor_xs切片技术取得成功.
谢谢!
正如其文档中所提到的,Panel目前还没有完全开发,因此您在使用时所依赖的甜蜜语法DataFrame尚不存在。
同时,我建议使用以下Panel.select方法:
def is_good_result(item_label):
# whatever condition over the selected item
df = results_panel[item_label]
return df['col1'].sum() > 5
good_results = results.select(is_good_result)
Run Code Online (Sandbox Code Playgroud)
该is_good_result函数返回一个布尔值。请注意,它的参数不是DataFrame实例,因为Panel.select它的参数应用于项目标签,而不是DataFrame该项目的内容。
当然,如果您注重简洁性,您可以在一条语句中将整个标准函数填充到 lambda 中:
good_results = results.select(
lambda item_label: results[item_label]['col1'].sum() > 5
)
Run Code Online (Sandbox Code Playgroud)