【问题标题】:Conditional Formatting on duplicate values using pandas使用熊猫对重复值进行条件格式设置
【发布时间】:2020-04-28 20:22:23
【问题描述】:

我有一个包含 A 和 B 两列的数据帧。我必须使用 pandas 分离出数据帧的子集以删除所有重复值。

For Example

我的数据框是这样的

**A     B**
1     1
2     3
4     4
8     8 
5     6
4     7

那么输出应该是

**A     B**
1     1       <--- both values Highlighted
2     3
4     4       <--- both values Highlighted
8     8       <--- both values Highlighted 
5     6
4     7       <--- value in column A highlighted

我该怎么做?

提前致谢。

【问题讨论】:

标签: python pandas dataframe duplicates conditional-formatting


【解决方案1】:

你可以用这个:

def color_dupes(x):
    c1='background-color:red'
    c2=''
    cond=x.stack().duplicated(keep=False).unstack()
    df1 = pd.DataFrame(np.where(cond,c1,c2),columns=x.columns,index=x.index)
    return df1
df.style.apply(color_dupes,axis=None)
# if df has many columns: df.style.apply(color_dupes,axis=None,subset=['A','B'])

示例工作代码:

说明: 首先我们 stack 数据框,以便将所有列组成一个系列,并找到 duplicatedkeep=False 以将所有重复项标记为 true:

df.stack().duplicated(keep=False)

0  A     True
   B     True
1  A    False
   B    False
2  A     True
   B     True
3  A     True
   B     True
4  A    False
   B    False
5  A     True
   B    False
dtype: bool

在此之后,我们unstack() 提供具有相同数据帧结构的布尔数据帧的数据帧:

df.stack().duplicated(keep=False).unstack()
       A      B
0   True   True
1  False  False
2   True   True
3   True   True
4  False  False
5   True  False

一旦我们有了这个,我们将背景颜色分配给值,如果为真,否则没有颜色使用np.where

【讨论】:

  • 你好,请问x是什么?
  • @anky_91 但在这种情况下 X 代表什么
  • @TwinkleLahariya 它是您想要应用此样式的任何数据框。基本上它是一个函数,因此我将其命名为 x ,您可以将相同的函数应用于 dfdf1.. 等要应用此函数的任何数据帧,因此 x.stack().duplicated(keep=False).unstack() 行将返回与 @ 显示的相同987654338@,因为它应用于df
  • @anky_91 如果我的 xlsx 文件中有多个列并且我必须将其应用于该文件的两个(例如列 E 和 F),该怎么办?
  • @TwinkleLahariya 然后保持函数不变,只适用于像df.style.apply(color_dupes,axis=None,subset=['E','F'])这样的子集
猜你喜欢
  • 2020-04-29
  • 1970-01-01
  • 2015-10-29
  • 2022-11-28
  • 2020-11-21
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多