如何显示样式化 DataFrame 中的随机样本?

问题描述 投票:0回答:1

我经常想查看 DataFrame 中

k
行的随机样本,而不仅仅是头/尾,为此我会使用
df.sample(frac=1.0).iloc[:k]

当我将

.style
链接到此示例时,样式器将只能看到
k
选定的行,并且生成的颜色映射将不准确,因为它只考虑示例。

如何对 DataFrame 进行洗牌、采样和设计样式,同时确保样式器使用所有数据?

示例

import pandas as pd
import numpy as np

#Data for testing
df = pd.DataFrame({
    'device_id': np.random.randint(200, 800, size=1000),
    'normalised_score': np.random.uniform(0, 2, size=1000),
    'severity_level': np.random.randint(-3, 4, size=1000),
})

#Inaccurate styling if I chain .style onto a sampled DataFrame:
df.sample(frac=1.0).iloc[:5].style.background_gradient(subset='severity_level', cmap='RdYlGn')

我使用的颜色图在

severity_level
(-3、-2、-1、0、+1、+2、+3)范围内大致呈红-白-绿。因此,值 0 应显示为 white,但在下面的示例中它会变成红色:

enter image description here

着色应考虑所有

severity_level
值,即使我只显示一些随机选择的行。

pandas dataframe pandas-styles
1个回答
0
投票

您需要首先将

df
插入样式器,然后链接到
.hide
,然后使用
.hide(df.sample(frac=1.0).index[:k])
选择行的随机子集。

.hide
不采用
lambda
函数,因此您无法在
.style
之前进行洗牌,然后在链中稍后访问洗牌后的 DataFrame。

#... data from OP
(
    df
    .style
    .background_gradient(subset='severity_level', cmap='RdYlGn')

    #Select k indices after shuffling
    .hide(df.sample(frac=1.0).index[:-5])
)

因此,值 0 应显示为白色,但它会变成红色,因为样式器仅获取部分数据

样式器现在使用

severity_level
的所有值,无论显示的示例如何

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.