我已经通过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]
及其变化。
答案 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', ''),
]);