7

我有一个 Pandas 面板,其中包含许多具有相同行/列标签的 DataFrame。我想使用基于几列满足某些标准的 DataFrame 创建一个新面板。

使用数据框和行很容易:假设我有一个 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))]

但我该怎么做(伪代码,简化的布尔值):

good_results_panel = results_panel[ all_dataframes[ sum ('zHe_calc' < 'zHe_obs') > min_num ] ]

我知道内部布尔部分,但是如何为面板中的每个数据框指定它?因为我需要来自每个 df 的多个列,所以我没有使用panel.minor_xs切片技术取得成功。

谢谢!

4

1 回答 1

1

正如其文档中所提到的,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)

is_good_result函数返回一个布尔值。请注意,它的参数不是DataFrame实例,因为Panel.select它的参数应用于项目标签,而不是该DataFrame项目的内容。

当然,你可以在一个语句中将整个标准函数填充到一个 lambda 表达式中,如果你喜欢整个简洁的东西:

good_results = results.select(
                 lambda item_label: results[item_label]['col1'].sum() > 5
                 )
于 2013-03-24T10:40:37.800 回答