使用另一个数据框的数据框的条件样式
Conditional styling of a DataFrame using another dataframe
我有两个 3X3 pandas DataFrames df1
A B C
0 8 3 9
1 1 7 7
2 3 3 8
和df2
.
A B C
0 2 1 2
1 5 9 7
2 1 8 3
我想获得的是一个表格化的Jupyter Notebook输出,其元素与df1
相同,但如果元素值大于df2
的对应值,则其字体颜色为红色。
因此,预期的输出类似于以下内容
A B C
0 8(r) 3(r) 9(r)
1 1 7 7
2 3(r) 3 8(r)
(r)
表示单元格的字体颜色为红色,不是真正的打印输出。
我试过的是applymap
这样的方法
df1.style.applymap(lambda x: 'color : red' if x > df2 else '')
但无法弄清楚如何将 labmda x
和 df2
置于平等地位。
有人能帮忙吗?
我们应该在 axis=None
:
上创建一个样式的 DataFrame 然后 Styler.apply
import pandas as pd
df1 = pd.DataFrame({'A': [8, 1, 3], 'B': [3, 7, 3], 'C': [9, 7, 8]})
df2 = pd.DataFrame({'A': [2, 5, 1], 'B': [1, 9, 8], 'C': [2, 7, 3]})
选项 1:比较 replace
:
style_df = (
df1 > df2 # Compare DataFrames
).replace({
True: 'background-color:red', # True Styles
False: '' # False Styles
})
df1.style.apply(lambda _: style_df, axis=None)
或者直接在应用调用中创建样式 DataFrame:
df1.style.apply(lambda _: (df1 > df2).replace({
True: 'background-color:red',
False: ''
}), axis=None)
选项 2:可能性能更高,但不太惯用 np.where
:
import numpy as np
df1.style.apply(lambda _: np.where(
df1 > df2, # Compare DataFrames
'background-color:red', # True Styles
'' # False Styles
), axis=None)
两者都产生样式 table:
如何使用 style_df
确定样式:
A B C
0 background-color:red background-color:red background-color:red
1
2 background-color:red background-color:red
我有两个 3X3 pandas DataFrames df1
A B C
0 8 3 9
1 1 7 7
2 3 3 8
和df2
.
A B C
0 2 1 2
1 5 9 7
2 1 8 3
我想获得的是一个表格化的Jupyter Notebook输出,其元素与df1
相同,但如果元素值大于df2
的对应值,则其字体颜色为红色。
因此,预期的输出类似于以下内容
A B C
0 8(r) 3(r) 9(r)
1 1 7 7
2 3(r) 3 8(r)
(r)
表示单元格的字体颜色为红色,不是真正的打印输出。
我试过的是applymap
这样的方法
df1.style.applymap(lambda x: 'color : red' if x > df2 else '')
但无法弄清楚如何将 labmda x
和 df2
置于平等地位。
有人能帮忙吗?
我们应该在 axis=None
:
Styler.apply
import pandas as pd
df1 = pd.DataFrame({'A': [8, 1, 3], 'B': [3, 7, 3], 'C': [9, 7, 8]})
df2 = pd.DataFrame({'A': [2, 5, 1], 'B': [1, 9, 8], 'C': [2, 7, 3]})
选项 1:比较 replace
:
style_df = (
df1 > df2 # Compare DataFrames
).replace({
True: 'background-color:red', # True Styles
False: '' # False Styles
})
df1.style.apply(lambda _: style_df, axis=None)
或者直接在应用调用中创建样式 DataFrame:
df1.style.apply(lambda _: (df1 > df2).replace({
True: 'background-color:red',
False: ''
}), axis=None)
选项 2:可能性能更高,但不太惯用 np.where
:
import numpy as np
df1.style.apply(lambda _: np.where(
df1 > df2, # Compare DataFrames
'background-color:red', # True Styles
'' # False Styles
), axis=None)
两者都产生样式 table:
如何使用 style_df
确定样式:
A B C
0 background-color:red background-color:red background-color:red
1
2 background-color:red background-color:red