我有下面的代码输出一个HTML表:
import pandas as pd
df = pd.DataFrame({
'Color': ['Red', 'Red', 'Yellow', 'Yellow'],
'Fruit': ['Apple', 'Strawberry', 'Banana', 'Peach'],
'Weight': [5, 3, 8, 6]
})
df = pd.pivot(df, index='Color', columns='Fruit', values='Weight')
print(df.to_html())
我希望每个单元格的输出都引用它的行(索引)和列值。例如,我希望使用一个格式函数,如下所示:
def format_value(val, row, col):
return f"<a href=/{row}/{col}>{val}</a>"
但是,我不知道该怎么做,我尝试了以下方法:
df.应用Map()
df = df.applymap(lambda x: format_value(x, row=x.index, col=x.name))
这将返回一个错误:
AttributeError: 'float' object has no attribute 'index'
to_html(格式化程序=...)
def format_cell(val, col, row):
def f(val):
return f"/{row}/{col}"
return f
format_map = {}
for col in df.columns:
format_map[col] = format_cell(col, df.index)
print(df.to_html(formatter=format_map))
但是,df.index
返回所有索引,因此无法知道格式化程序具体引用的是哪一行。
创建新 Dataframe
我可以通过创建一个新的 Dataframe 并使用iterrows()
,以一种繁琐的方式完成这项工作:
df_formatted = df.copy()
for index, row in df.iterrows():
for c in df.columns:
df_formatted[c][index] = f"<a href=/{index}/{c}>{df[c][index]}</a>"
我怎样才能创建一个HTML格式化程序,它同时知道每个值的索引和列?
1条答案
按热度按时间5f0d552i1#
这是我能想到的最简单的办法:
本质上,它使用apply()来遍历每一行,向该函数传递一个Series,可以使用
.name
获取Series的索引,它还关闭了转义,以便正确呈现链接。