【发布时间】:2023-01-05 16:29:39
【问题描述】:
我想将 pandas 数据帧中的一些信息组合成具有 html 语法的字符串。
对于目标字符串,我想将一些列名称与它们的值组合起来,由 html 标记 <br> 分隔。因此,如果所选列是 vehicle、owner 和 mileage,则第一个索引的结果应该是字符串
vehicle: Ford<br>owner: Sandy<br>mileage: 53647
我制定了一个解决方案,但我认为必须有更简单的方法来做到这一点。这是我所做的:
import pandas as pd
# %% create some data
demo = {'vehicle': ['Ford', 'VW', 'Mercedes', 'Dodge'],
'owner': ['Sandy', 'Brutus', 'Driver5', 'Al'],
'mileage': [53647, 12564, 24852, 1000000],
'some random ratio': [0.3, 1.8, 66.6, 18.0]}
df_demo = pd.DataFrame(demo)
# %% create tooltip string
# select columns
tt_cols = ['vehicle','owner','mileage']
# creates tuple of columns and values for each row
df_demo['tooltip'] = df_demo[tt_cols].apply(lambda row: list(zip(tt_cols, row.values.astype(str))), axis=1)
# strings from tuples
df_demo['tooltip'] = df_demo['tooltip'].apply(lambda val: [': '.join(x) for x in val])
# list of strings to string with separator
df_demo['tooltip'] = df_demo['tooltip'].apply(lambda val: '<br>'.join(val))
这工作正常并创建一个新列tooltip,每行都有字符串。但是,在我看来,通过整个数据帧迭代三次来创建这个字符串并不是很“优雅”。
我知道我可以组合/嵌套最后几行,但我认为这是不可读的:
df_demo['tooltip'] = df_demo[tt_cols].apply(lambda row: '<br>'.join([': '.join(x) for x in list(zip(tt_cols, row.values.astype(str)))]), axis=1)
任何建议如何增强它,使其更短或更具可读性?
【问题讨论】: