Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列值设置数据帧行的样式_Python_Css_Pandas_Dataframe_Jupyter - Fatal编程技术网

Python 基于列值设置数据帧行的样式

Python 基于列值设置数据帧行的样式,python,css,pandas,dataframe,jupyter,Python,Css,Pandas,Dataframe,Jupyter,我有一个csv文件,我正试图读入jupyter笔记本中的数据帧和样式。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', 'EV

我有一个csv文件,我正试图读入jupyter笔记本中的数据帧和样式。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]]
我的目标是设置行的背景色样式,以便在事务列值为“Buy”时,行的颜色为绿色,在事务列值为“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)
当我运行代码时,它会输出一个未设置样式的电子表格,而不会给出错误代码:

我真的不确定我做错了什么,我尝试了很多不同的方法,但似乎都无法奏效。任何帮助都将不胜感激

试试看

data['background-color'] = data.apply(lambda x: red_or_green(x.Transaction), axis=1)


def red_or_green(transaction):
    if transaction == 'Sale':
        return 'red'
    else:
        return 'green'
或者您可以使用地图:

data['background-color'] = data.Transaction.map(red_or_green)
修改:

def红色或绿色(行):
如果row.Transaction==“销售”:
返回pd.Series('背景色:红色',行索引)
其他:
返回pd.Series('背景色:绿色',行索引)
styled_table=df.style.apply(红色或绿色,轴=1)

如果要在条件匹配时比较整行,则以下操作比在axis=1上应用快,在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(.....)


谢谢,当我尝试这两种方法时,它在df中添加了一列标题为“背景色”,每行的值为“红色”或“绿色”,但是行本身的背景色仍然没有样式。对不起,请误读您的问题。不确定数据帧的样式。尝试返回['background-color:yellow'],看看是否有效。希望其他人能加入进来。你想给整行上色还是只给列上色?如果可能的话,我正在尝试给整行上色。@HenryEcker我认为提议的复制品与我们这里的不同,OP已经知道这里的axis=1。好的。如果他们通过添加一个row参数并返回一个带有row.index的序列,而不是
红色或绿色
中的列表,从而将复制问题的已接受答案应用于此函数,则该答案有效。这有效!非常感谢你!非常感谢。