如何在Pandas中为DataFrame逐行生成独立的msg列?
解决Pandas DataFrame逐行生成个性化消息的问题
你的问题出在直接用f-string拼接整个Pandas Series(比如df.Name),这会把整列的所有值都塞进同一个字符串里,而不是逐行提取对应的值。下面是两种可行的解决方法:
方法一:使用apply逐行处理
先提前计算好日期范围(避免重复计算提升效率),再通过apply遍历每一行生成消息:
import datetime import pandas as pd # 模拟数据 data = { 'Name': ['Jane', 'Celi'], 'A': [1, 4], 'B': [2, 5], 'C': [3, 9] } df = pd.DataFrame(data) # 计算日期区间 start_date = datetime.date.today() - datetime.timedelta(days=7) end_date = datetime.date.today() # 逐行生成消息 df['msg'] = df.apply( lambda row: f'''Hi {row.Name} you have {row.A} for A and {row.B} for B, making {row.C} in total for {start_date} and {end_date}. ''', axis=1 )
这里axis=1指定按行处理,lambda函数里的row代表每一行的数据,可以直接通过row.列名获取对应行的数值。
方法二:使用str.format结合列映射
如果你偏好更简洁的写法,也可以用字符串的format方法,直接映射DataFrame的列:
df['msg'] = 'Hi {Name} you have {A} for A and {B} for B, making {C} in total for {start} and {end}. '.format( start=start_date, end=end_date, **df.to_dict('series') )
这种方法通过**df.to_dict('series')把列名和对应Series传入format,实现逐行替换。
执行后,df['msg']列会生成每行匹配自身数据的个性化消息:
- Jane对应的消息:
Hi Jane you have 1 for A and 2 for B, making 3 in total for [起始日期] and [今日日期]. - Celi对应的消息:
Hi Celi you have 4 for A and 5 for B, making 9 in total for [起始日期] and [今日日期].
内容的提问来源于stack exchange,提问作者Dela
相关产品推荐
相关产品推荐

