如何比较一个DataFrame与另一个单行DataFrame并相应地着色或修改单元格?

时间:2017-01-14 18:29:12

标签: python pandas jupyter-notebook

我有DataFrame

data

它的意思是

data.describe()['mean':'mean']

(没有找到更好的方法来提取手段)

我想显示data以便它可见,哪些值大于均值(并用红色标记附加某些标签,如"更大")以及哪些值是小于平均值(并用蓝色标记它或用#34标记它;小于#34;)。

据我所知,着色可能取决于输出技术,所以我使用jupyter笔记本和

from IPython.display import display

不需要着色。用标签替换字符串是可以的。

更新

我需要将值包含在单独的1行表中,而不是动态计算。

更新2

假设我有2个数据集

df1 = pd.DataFrame(np.random.rand(10,5))
df2 = pd.DataFrame(np.random.rand(1,5))

并希望根据df1为<{1}}着色?

2 个答案:

答案 0 :(得分:3)

<强>更新

df1 = pd.DataFrame(np.random.rand(10,5))
df2 = pd.DataFrame(np.random.rand(1,5))
df1.style.apply(lambda x: np.where(x > df2.loc[0, x.name], 'color: green', 'color: blue'))

enter image description here

OLD回答:

您可以使用Pandas Style

df.style.apply(lambda x: np.where(x >= x.mean(), 'color: red', 'color: blue'))

答案 1 :(得分:1)

对于更新后的问题,您可以使用

df1.style.apply(lambda x: np.where(x > df2.values[0], 'color: red', 'color: blue'), axis=1)

首先,创建一些示例数据会很好。在这里,我们使用numpy这样做,然后以更清洁的方式采用均值。

np.random.seed(1234)
df = pd.DataFrame(np.random.rand(10,5))
df.mean()

输出

0    0.543436
1    0.371999
2    0.473440
3    0.585303
4    0.370456
dtype: float64

然后,您可以使用np.wherestyle方法对文字进行适当的着色

df.style.apply(lambda x: np.where(x < df.mean(), 'color: blue', 'color: red'), axis=1)

enter image description here