Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 如果A列相同,如何突出显示所有其他不同的列?_Python_Openpyxl - Fatal编程技术网

Python 如果A列相同,如何突出显示所有其他不同的列?

Python 如果A列相同,如何突出显示所有其他不同的列?,python,openpyxl,Python,Openpyxl,我有一个包含多个列的excel文件。第一列包含键,并且有重复项 我想要实现的是比较包含相同键的所有列中的值,如果它们不同,则高亮显示 以下是一个例子: values = {'product_key': [101, 102, 103, 101, 105, 103], 'date': ['2020-01-01', '2020-05-05', '2019-11-15', '2020-03-02', '2019-03-01', '2019-11-15'], 'price'

我有一个包含多个列的excel文件。第一列包含键,并且有重复项

我想要实现的是比较包含相同键的所有列中的值,如果它们不同,则高亮显示

以下是一个例子:

values = {'product_key': [101, 102, 103, 101, 105, 103],
        'date': ['2020-01-01', '2020-05-05', '2019-11-15', '2020-03-02', '2019-03-01', '2019-11-15'],
        'price': ['$15', '$13', '$11', '$14',' $20', '$18']}
df = pd.DataFrame(values, columns = ['product_key', 'date', 'price'])
我的桌子是这样的:

   product_key  date      price
      101    2020-01-01   $15
      102    2020-05-05   $13
      103    2019-11-15   $11
      101    2020-03-02   $14
      105    2019-03-01   $20
      103    2019-11-15   $18

我想突出显示101的价格和日期,以及103的价格。我目前正在使用openpyxl。如果openpyxl不能做到这一点,还有其他库(anaconda中提供)可以帮助吗?

我没有尝试仅使用
openpyxl
来实现这一点,但这将要求您迭代整个工作表(=数据帧),并手动按每个
产品密钥进行分组,然后使用
openpyxl
/“Excel”进行比较语法

使用(我是其中的一名维护人员)将允许您使用pandas语法在数据帧级别解决这个问题

首先,我们根据
产品密钥
分组,然后使用
.apply
在每个子数据帧上调用自定义函数。然后,我们可以使用带有否定(
~
)的
复制的
,并使用
样式框
进行样式设置

from styleframe import StyleFrame, Styler

values = {'product_key': [101, 102, 103, 101, 105, 103],
          'date': ['2020-01-01', '2020-05-05', '2019-11-15', '2020-03-02', '2019-03-01', '2019-11-15'],
          'price': ['$15', '$13', '$11', '$14',' $20', '$18']}
full_df = pd.DataFrame(values, columns=['product_key', 'date', 'price'])

yellow_bg_style = Styler(bg_color='yellow')
full_sf = StyleFrame(full_df)

def style_non_matching(grouped_df):
    if len(grouped_df) == 1:
        return
    grouped_sf = StyleFrame(grouped_df)
    for column in ('date', 'price'):
        grouped_sf.apply_style_by_indexes(grouped_sf[~grouped_sf[column].duplicated(keep=False)],
                                          yellow_bg_style,
                                          cols_to_style=column)

full_sf.groupby('product_key').apply(style_non_matching)
full_sf.to_excel('test.xlsx').save()
将产生


谢谢你的回答!然而,我只允许使用anaconda中提供的库。我没有在Anaconda中看到styleframe。有其他选择吗?@CCCCos因为你不是第一个(也可能不是最后一个),我将研究如何使styleframe在上可用Anaconda@CCCCos顺便说一句,您可以使用
pip
conda
上安装
styleframe
:1。激活conda环境,2<代码>康达安装pip
,3<代码>pip安装样式框
,4
conda列表
应显示
styleframe
最简单的方法是为相关范围添加条件格式。注意。openpyxl只是作为一个管道,因此您必须检查Excel文档,并可能查看相关的源文件以获得正确的语法。