【问题标题】:Combine dataframe column names and row values to a single string将数据框列名和行值合并为一个字符串
【发布时间】:2023-01-05 16:29:39
【问题描述】:

我想将 pandas 数据帧中的一些信息组合成具有 html 语法的字符串。

这是该问题的演示数据框

对于目标字符串,我想将一些列名称与它们的值组合起来,由 html 标记 <br> 分隔。因此,如果所选列是 vehicleownermileage,则第一个索引的结果应该是字符串

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: '&lt;br&gt;'.join([': '.join(x) for x in list(zip(tt_cols, row.values.astype(str)))]), axis=1)

任何建议如何增强它,使其更短或更具可读性?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2018-01-29
      • 1970-01-01
      • 2015-09-17
      • 2018-04-23
      • 2022-06-20
      • 2022-01-08
      • 2018-10-31
      • 2020-08-07
      相关资源
      最近更新 更多