0

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

statistics = df.describe()

我想根据计数过滤统计数据框:

    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]

及其变体。

4

2 回答 2

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.

对于每一列,检查 count 是否 > 阈值并将其添加到 selected_columns 列表中:

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

# chosen_columns output: ['name']

或者:

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

# chosen_columns output: ['name']
于 2017-08-21T14:49:09.507 回答
0

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

statistics.T[statistics.T['count']>30].T
于 2020-09-30T03:30:22.973 回答