使用示例資料框 df,如下所示:
姓名 | 日 |
---|---|
鮑勃 | 周一 |
約翰 | 周四 |
山姆 | 星期五 |
鮑勃 | 周一 |
凱蒂 | 星期日 |
凱爾 | 周二 |
凱蒂 | 周六 |
鮑勃 | 周三 |
凱蒂 | 星期日 |
山姆 | 周四 |
喬 | 星期五 |
我想要做的是如果名稱列中的值只出現一次,則突出顯示一行說黃色,如果值出現兩次,則說紅色。
我試圖做的是按名稱對它們進行分組,然后執行以下操作以突出顯示名稱出現一次的行:
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)
但它仍然不適合我。我不確定我在這里缺少什么。
uj5u.com熱心網友回復:
首先創建一個包含 的映射的字典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)
結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453450.html