Python 将样式按行应用于数据帧
我正在用一个包含客户信息的数据集来试验/学习Python 数据帧结构如下(这些是由记录组成的): 将Python 将样式按行应用于数据帧,python,pandas,dataframe,formatting,Python,Pandas,Dataframe,Formatting,我正在用一个包含客户信息的数据集来试验/学习Python 数据帧结构如下(这些是由记录组成的): 将transpose方法应用于df1,我们得到以下视图: df2 = df1.T print(df2) 0 1 2 3 left_name James Mary John Patricia left_age 30 37 30 35 righ
transpose
方法应用于df1
,我们得到以下视图:
df2 = df1.T
print(df2)
0 1 2 3
left_name James Mary John Patricia
left_age 30 37 30 35
right_name Robert Jennifer Michael Linda
right_age 30 31 38 35
我的目标是对df2
应用一些样式。具体来说,
和left_name
行应以黄色突出显示李>right_name
和left_age
行应以蓝色突出显示right_age
df2.style.set_properties(subset = pd.IndexSlice[['left_name', 'right_name'], :], **{'background-color' : 'yellow'})
问题是我无法将多种样式组合在一起。如果我使用与上面相同的方法为left_age
和right_age
添加额外的蓝色,我将“丢失”以前的样式
理想情况下,我希望有一个函数将
df2
作为输入并返回样式化的数据帧 您可以使用创建样式的数据框,并使用loc
按索引值设置行:
def highlight(x):
c1 = 'background-color: yellow'
c2 = 'background-color: blue'
df1 = pd.DataFrame('', index=x.index, columns=x.columns)
df1.loc[['left_name','right_name'], :] = c1
df1.loc[['left_age','right_age'], :] = c2
return df1
df1.style.T.apply(highlight, axis=None)
您可以使用创建样式的数据框,并使用
loc
按索引值设置行:
def highlight(x):
c1 = 'background-color: yellow'
c2 = 'background-color: blue'
df1 = pd.DataFrame('', index=x.index, columns=x.columns)
df1.loc[['left_name','right_name'], :] = c1
df1.loc[['left_age','right_age'], :] = c2
return df1
df1.style.T.apply(highlight, axis=None)
你太接近了!实际上,您可以在同一数据帧上“链接”
设置\u属性
:
df2.style.set_properties(subset = pd.IndexSlice[['left_name','right_name'], :], **{'background-color' : 'yellow'})\
.set_properties(subset = pd.IndexSlice[['left_age','right_age'], :], **{'background-color' : 'blue'})
我相信有一个更优雅的解决方案-但这是可行的 你离得太近了!实际上,您可以在同一数据帧上“链接”
设置\u属性
:
df2.style.set_properties(subset = pd.IndexSlice[['left_name','right_name'], :], **{'background-color' : 'yellow'})\
.set_properties(subset = pd.IndexSlice[['left_age','right_age'], :], **{'background-color' : 'blue'})
我相信有一个更优雅的解决方案-但这是可行的 我知道一定有更好的办法。你总是教我一些东西!如果我执行上述操作,我将收到错误:AttributeError:'Styler'对象没有属性'T',我知道一定有更好的方法。你总是教我一些东西!如果我执行上述操作,我将收到错误:AttributeError:'Styler'对象没有属性'T'。事实上,我很接近!我有点偏爱耶斯雷尔的解决方案,但我也比你的方案投了更高的票。@VonKar,因为它的价值。。。我也喜欢他的解决方案,因为我很接近!我有点偏爱耶斯雷尔的解决方案,但我也比你的方案投了更高的票。@VonKar,因为它的价值。。。我也喜欢他的解决方案哈哈