python - 根据列值对数据框的行进行样式设置
问题描述
我有一个 csv 文件,我正在尝试将其读入 jupyter notebook 中的数据框和样式。csv文件数据为:
[[' ', 'Name', 'Title', 'Date', 'Transaction', 'Price', 'Shares', '$ Value'],
[0, 'Sneed Michael E', 'EVP, Global Corp Aff & COO', 'Dec 09', 'Sale', 152.93, 54662, 8359460],
[1, 'Wengel Kathryn E', 'EVP, Chief GSC Officer', 'Sep 02', 'Sale', 153.52, 16115, 2473938],
[2, 'McEvoy Ashley', 'EVP, WW Chair, Medical Devices', 'Jul 28', 'Sale', 147.47, 29000, 4276630],
[3, 'JOHNSON & JOHNSON', '10% Owner', 'Jun 30', 'Buy', 17.00, 725000, 12325000]]
我的目标是设置行的背景颜色的样式,以便如果 Transaction 列值为“Buy”,则该行为绿色,如果 Transaction 列值为“Sale”,则为红色。
我试过的代码是:
import pandas as pd
data = pd.read_csv('/Users/broderickbonelli/Desktop/insider.csv', index_col='Unnamed: 0')
def red_or_green():
if data.Transaction == 'Sale':
return ['background-color: red']
else:
return ['background-color: green']
data.style.apply(red_or_green, axis=1)
display(data)
当我运行代码时,它会输出一个没有样式的电子表格,而不会给我一个错误代码:
我不太确定自己做错了什么,我已经尝试了多种不同的方法,但似乎无法让它发挥作用。任何帮助,将不胜感激!
解决方案
如果您想在条件匹配时比较整行,以下比 apply on axis=1 更快,我们在整个数据帧上使用样式:
def red_or_green(dataframe):
c = dataframe['Transaction'] == 'Sale'
a = np.where(np.repeat(c.to_numpy()[:,None],dataframe.shape[1],axis=1),
'background-color: red','background-color: green')
return pd.DataFrame(a,columns=dataframe.columns,index=dataframe.index)
df.style.apply(red_or_green, axis=None)#.to_excel(.....)
推荐阅读
- sql - 我需要什么索引?
- angular - 如何使用 Angular cli 使用单个命令创建模块和组件并为现有模块创建组件?
- json - 如何在 SwiftUI 中使用从 JSON 解码的数据
- c - Clang 产生的可执行文件是 94% 的空字节,如何缩小呢?
- python - 检查值是否在 Pandas 数据框列中
- python - mongoDB:对文档中的计算值执行 collection.find()
- python - 使用 XML ElementTree 从 XML(旧 Excel)文件中提取值
- python - 我想用 WIDF(加权逆文件频率)算法使用 python 代码预处理文本
- cv2 - 基于 arcLength 裁剪轮廓
- digital-ocean - 当 supervisorctl start worker 时服务器停止响应