Pandas->Styler:当两行或更多行的单元格具有相同值时隐藏特定单元格
Pandas->Styler: Hide specific cells when two or more rows have cells with the same value
我在以下数据框中有三行描述同一个人,但手机不同:
data = {'Name':['tom', 'tom', 'tom', 'nick', 'krish', 'jack'],
'Age':[20, 20, 20, 21, 19, 18],
'Phone':[1234, 2345, 4576, 7890, 6767, 7676]}
df = pd.DataFrame(data)
In [16]: df
Out[16]:
Name Age Phone
0 tom 20 1234
1 tom 20 2345
2 tom 20 4576
3 nick 21 7890
4 krish 19 6767
5 jack 18 7676
我想生成 html,其中样式被定义为隐藏以下匹配行中的重复单元格,只留下差异:
table_output
Name Age Phone
tom 20 1234
2345
4576
nick 21 7890
krish 19 6767
jack 18 7676
我怎样才能:
- 识别重复值(我正在使用以下 PSB,但也许有更好的方法)
- 像上面的 table_output 那样将它们隐藏在 Styler 对象中?
In [22]: df.duplicated("Name")
Out[22]:
0 False
1 True
2 True
3 False
4 False
5 False
dtype: bool
In [23]: df.duplicated("Age")
Out[23]:
0 False
1 True
2 True
3 False
4 False
5 False
dtype: bool
我已经成功创建了
df_dup = df[df["Name"].duplicated()]
df_dup.style.hide_columns([0,1])
但我无法将 df 与 df_dup -> 风格相交..
谢谢。
在 Jupyter notebook 中使用以下数据框:
import pandas as pd
df = pd.DataFrame(
data={
"Name": ["tom", "tom", "tom", "nick", "krish", "jack"],
"Age": [20, 20, 20, 21, 19, 18],
"Phone": [1234, 2345, 4576, 7890, 6767, 7676],
}
)
df
输出
你可以这样做:
def mask_values(val):
return f"opacity: {0}"
df.style.applymap(
mask_values,
subset=(
df[df.duplicated(subset=["Name", "Age"], keep="first")].index,
["Name", "Age"],
),
)
输出
您可以检查下面的数据帧是否未更改:
df.loc[0, "Name"] # Output: 'tom'
我在以下数据框中有三行描述同一个人,但手机不同:
data = {'Name':['tom', 'tom', 'tom', 'nick', 'krish', 'jack'],
'Age':[20, 20, 20, 21, 19, 18],
'Phone':[1234, 2345, 4576, 7890, 6767, 7676]}
df = pd.DataFrame(data)
In [16]: df
Out[16]:
Name Age Phone
0 tom 20 1234
1 tom 20 2345
2 tom 20 4576
3 nick 21 7890
4 krish 19 6767
5 jack 18 7676
我想生成 html,其中样式被定义为隐藏以下匹配行中的重复单元格,只留下差异:
table_output
Name Age Phone
tom 20 1234
2345
4576
nick 21 7890
krish 19 6767
jack 18 7676
我怎样才能:
- 识别重复值(我正在使用以下 PSB,但也许有更好的方法)
- 像上面的 table_output 那样将它们隐藏在 Styler 对象中?
In [22]: df.duplicated("Name")
Out[22]:
0 False
1 True
2 True
3 False
4 False
5 False
dtype: bool
In [23]: df.duplicated("Age")
Out[23]:
0 False
1 True
2 True
3 False
4 False
5 False
dtype: bool
我已经成功创建了
df_dup = df[df["Name"].duplicated()]
df_dup.style.hide_columns([0,1])
但我无法将 df 与 df_dup -> 风格相交..
谢谢。
在 Jupyter notebook 中使用以下数据框:
import pandas as pd
df = pd.DataFrame(
data={
"Name": ["tom", "tom", "tom", "nick", "krish", "jack"],
"Age": [20, 20, 20, 21, 19, 18],
"Phone": [1234, 2345, 4576, 7890, 6767, 7676],
}
)
df
输出
你可以这样做:
def mask_values(val):
return f"opacity: {0}"
df.style.applymap(
mask_values,
subset=(
df[df.duplicated(subset=["Name", "Age"], keep="first")].index,
["Name", "Age"],
),
)
输出
您可以检查下面的数据帧是否未更改:
df.loc[0, "Name"] # Output: 'tom'