按Pandas中的行中的值过滤列

时间:2017-08-21 14:42:06

标签: python pandas multilevel-analysis

我已经通过Pandas中的df.describe()获取了我的数据框的统计信息。

statistics = df.describe()

我想基于count来过滤统计数据框:

    main    Meas1     Meas2 Meas3   Meas4  Meas5
    sublvl  Value     Value Value   Value   Value       
    count   7.000000  1.0   1.0     582.00  97.000000       
    mean    30        37.0  26.0    33.03   16.635350

我希望得到类似的东西: 过滤掉计数小于30的所有值,并在新数据框中仅显示计数>> 30的列(或者给我一个列表,其中所有主数据都计数> 30)。

对于上面的例子,我想要:

    main       Meas4    Meas5
    sublvl     Value    Value       
    count      582.00   97.000000       
    mean       33.03    16.635350

[Meas4, Meas5]

我试过了

thresh = statistics.columns[statistics['count']>30]

及其变化。

2 个答案:

答案 0 :(得分:1)

import pandas as pd

df = pd.DataFrame.from_dict({'name':[1,2,3,4,5], 'val':[1, None,None,None,None]})

df

name    val
0   1   1.0
1   2   NaN
2   3   NaN
3   4   NaN
4   5   NaN

如果您想使用describe(),请注意,describe不会提供所有列。默认情况下,仅返回具有数字数据类型的列:

你可以这样做:

statistics = df.describe()

# to describe all columns you can do this
statistics = df.describe(include = 'all')

[column for column in statistics.columns if statistics.loc['count'][column] > 3]
# output ['name']

正如评论中所讨论的那样,由于这是一个只选择第一个索引的MultiIndex列,我们可以这样做:

# [column[0] for column in statistics.columns if statistics.loc['count'][column] > 3] # this code won't work correctly for non multi index dataframes.

每列检查计数是否>阈值并将其添加到selected_columns列表:

chosen_columns = []
for column in df.columns:
    if len(df[column].value_counts()) > 3:
        chosen_columns.append(column)

# chosen_columns output: ['name']

OR:

chosen_columns = []
for column in df.columns:
    if df[column].count() > 3:
        chosen_columns.append(column)

# chosen_columns output: ['name']

答案 1 :(得分:0)

在熊猫中,按列选择值要容易得多,因此您可以先进行转置,然后根据需要选择然后转置。

    $this->crud->addField([
        'name'    => 'code',
        'label'   => 'Code',
        'type'    => 'text',
        'default' => request()->input('code', ''),
    ]);