如何根据只出现 x 次的列值突出显示行?
How to highlight rows based on a column value that only appears x amount of times?
使用示例数据框 df,如下所示:
Name
Day
Bob
Monday
John
Thursday
Sam
Friday
Bob
Monday
Katie
Sunday
Kyle
Tuesday
Katie
Saturday
Bob
Wednesday
Katie
Sunday
Sam
Thursday
Joe
Friday
我想做的是突出显示一行,如果名称列中的值只出现一次,则说黄色,如果该值出现两次,则说红色。
我尝试做的是按名称对它们进行分组,然后执行类似以下操作以突出显示名称出现一次的行:
highlight = lambda x: ['background: yellow' if (x['Name'] != (x-1)['Name'] and x['Name'] != (x+1)['Name']) else '' for i in x]
df.style.apply(highlight, axis = 1)
但是,这没有用,所以我没有着手尝试突出显示名称列中出现两次的值的行。尽管尝试对其进行研究,但我并不完全了解 lambda x 的工作原理,因此我不知道您是否可以应用运算符来访问前一行。
编辑:
根据推荐的问题,我尝试了以下方法:
def color_recommend():
for index, row in enumerate(df):
if df.Name.str.count(df.loc[i, 'Name']).sum() == 1:
color = 'red'
elif df.Name.str.count(df.loc[i, 'Name']).sum() == 2:
color = 'green'
else:
color = 'white'
return 'background-color: %s' % color
df.style.applymap(color_recommend)
但它仍然不适合我。我不确定我在这里遗漏了什么。
首先创建一个包含counts->color
映射的字典,然后使用value_counts
计算每个字符串在Name
列中出现的频率,然后map
使用 cmap
字典计算频率以创建 colors
,最后在每一列上应用 colors
以获得结果
cmap = {1: 'green', 2: 'yellow', 3: 'red'}
freq = df['Name'].map(df['Name'].value_counts())
colors = freq.map(cmap).radd('background-color: ')
df.style.apply(lambda s: colors)
结果
使用示例数据框 df,如下所示:
Name | Day |
---|---|
Bob | Monday |
John | Thursday |
Sam | Friday |
Bob | Monday |
Katie | Sunday |
Kyle | Tuesday |
Katie | Saturday |
Bob | Wednesday |
Katie | Sunday |
Sam | Thursday |
Joe | Friday |
我想做的是突出显示一行,如果名称列中的值只出现一次,则说黄色,如果该值出现两次,则说红色。
我尝试做的是按名称对它们进行分组,然后执行类似以下操作以突出显示名称出现一次的行:
highlight = lambda x: ['background: yellow' if (x['Name'] != (x-1)['Name'] and x['Name'] != (x+1)['Name']) else '' for i in x]
df.style.apply(highlight, axis = 1)
但是,这没有用,所以我没有着手尝试突出显示名称列中出现两次的值的行。尽管尝试对其进行研究,但我并不完全了解 lambda x 的工作原理,因此我不知道您是否可以应用运算符来访问前一行。
编辑:
根据推荐的问题,我尝试了以下方法:
def color_recommend():
for index, row in enumerate(df):
if df.Name.str.count(df.loc[i, 'Name']).sum() == 1:
color = 'red'
elif df.Name.str.count(df.loc[i, 'Name']).sum() == 2:
color = 'green'
else:
color = 'white'
return 'background-color: %s' % color
df.style.applymap(color_recommend)
但它仍然不适合我。我不确定我在这里遗漏了什么。
首先创建一个包含counts->color
映射的字典,然后使用value_counts
计算每个字符串在Name
列中出现的频率,然后map
使用 cmap
字典计算频率以创建 colors
,最后在每一列上应用 colors
以获得结果
cmap = {1: 'green', 2: 'yellow', 3: 'red'}
freq = df['Name'].map(df['Name'].value_counts())
colors = freq.map(cmap).radd('background-color: ')
df.style.apply(lambda s: colors)
结果