设置pandas表的样式并合并2个 Dataframe

huus2vyu  于 2023-06-04  发布在  其他
关注(0)|答案(3)|浏览(146)

我想设计pandas表的样式,但我不能每隔一行重新塑造它,用这种方式着色或设置边框。如果有人能帮我的话我会很感激的。我把两张表都放在下面。右边的table现在是我的table,左边的table是我的目标。
| 基于内容的电影标题|基于内容的电影ID|协同过滤电影标题|协作过滤MOVIES ID|
| - -----|- -----|- -----|- -----|
| 普通人|一九五六年|60号州际公路|六九零二|
| 火行者|二四七七|橡胶|81132|
| 梦幻星球(Planète sauvage,La)|二四九五|龙心2:新的开始|117646|
| 77年机场|二五二二|由内而外|134853|
| 罗伯茨先生|三零三五|韦弗利Place的巫师:电影|一四八七七五|

为了给它着色,我尝试使用www.example.com更改表的属性style.properties,并使用不同的连接和合并技术每隔一行粘贴两个表,但它们都不起作用。

72qzrwbm

72qzrwbm1#

您可以lreshape您的 DataFrame,然后使用apply/applymap_index(* 这是Excel友好 *):

out = pd.lreshape(
    df, {
        "TITLE": ["Content Based MOVIES TITLE", "Colaborative Filtering MOVIES TITLE"],
         "ID": ["Content Based MOVIES ID", "Colaborative Filtering MOVIES ID"]
    }
)

import numpy as np

#rows
purple = "background-color: #ffff99; color: black"
yellow = "background-color: #b376e0; color: black"
border = ["border-right: 3px solid black", ""]

#header
bgray = [
    "border-right: 3px solid black; background-color: #e9e8fc; color: black",
    "background-color: #e9e8fc; color: black;"
]    

(
    out.style
        .apply(lambda x: np.where(x.index % 2, yellow, purple))
        .apply(lambda _: border, axis=1)
        .apply_index(lambda _: bgray, axis=1)
        # .to_excel("output.xlsx", index=False) #optional
)

输出:

wnrlj8wa

wnrlj8wa2#

通过引用文档得到了这个。
https://pandas.pydata.org/docs/user_guide/style.html#Finer-Control-with-Slicing
他们使用pd.IndexSlice显示了一个类似的示例,我对此进行了一点调整。
注意,::2表示每隔一个项目,与0::2相同。
1::2表示从第二项开始的每隔一项。

df = pd.DataFrame({
    'columnA': [1, 3, 4, 9, 1],
    'columnB': [2, 4, 5, 1, 5],
    'columnC': [2, 4, 5, 10, 3]
})

idx = pd.IndexSlice
slice1 = idx[idx[::2, :]]
slice2 = idx[idx[1::2, :]]

df.style \
  .set_properties(**{'background-color': '#FFFF99'}, subset=slice1) \
  .set_properties(**{'background-color': '#B376E0'}, subset=slice2)

2w2cym1i

2w2cym1i3#

Pandas的样式在工作时工作得很好,但是对于任何不明显的东西,很难配置它。如果你的项目是一次性的,你不需要自动化,一个更简单的解决方案是在任何文档/电子表格软件中的Python环境之外格式化它。或者,如果自动化是一个要求,你可以用HTML进行格式化(从DataFrame提取数据,并将其放入一个字符串中进行HTML格式化);并对HTML做任何您想做的事情--导出它或在您的环境中显示它。
要将右子表放在左子表下面,可以使用pd.concat函数。

相关问题