我想將熊貓資料框中的一些資訊與 html-syntax 組合到一個字串中。
這是該問題的演示資料框

對于目標字串,我想將一些列與其值組合在一起,由 html-tag 分隔<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)
任何建議如何增強這一點,使其更短或更易讀?
uj5u.com熱心網友回復:
您可以使用to_dict('records')將行轉換為字典串列,然后使用串列推導來格式化它們:
df['tooltip'] = ['<br>'.join(f'{k}: {v}' for k, v in i.items()) for i in df_demo[tt_cols].to_dict('records')]
輸出:
>>> df
vehicle owner mileage some random ratio tooltip
0 Ford Sandy 53647 0.3 vehicle: Ford<br>owner: Sandy<br>mileage: 53647
1 VW Brutus 12564 1.8 vehicle: VW<br>owner: Brutus<br>mileage: 12564
2 Mercedes Driver5 24852 66.6 vehicle: Mercedes<br>owner: Driver5<br>mileage: 24852
3 Dodge Al 1000000 18.0 vehicle: Dodge<br>owner: Al<br>mileage: 1000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466676.html
上一篇:熊貓:條件后創建指標列
