如何在Pandas DataFrame中遍历行并输出指定格式的期望结果?
解决Pandas遍历行输出格式问题
看起来你是因为没正确处理同ID下的多行数据,或者在循环中错误引用了整列而非当前行的值,才导致输出不符合预期。我来给你一步步解决这个问题:
首先模拟你的数据结构
假设你的DataFrame包含id、company_name和acceptance_rate这几列(如果你的接受率列名是world acceptance rate,只需要替换代码里的对应字段即可):
import pandas as pd # 示例数据,和你的期望输出对应 data = { 'id': [24922, 24922, 24924, 25096, 25096, 25096], 'company_name': ['YES BANK LTD', 'NOMURA SECURITIES CO LTD', 'ZENSAR TECHNOLOGIES LTD', 'TUI AG', 'CITIGROUP INC', 'UBS INVESTMENT BANK'], 'acceptance_rate': [97, 91, 97, 94, 93, 91] } df = pd.DataFrame(data)
正确的实现方法
核心思路是先按ID分组,把同一ID下的所有公司条目拼接起来,再组合成你要的格式:
方法1:使用groupby+循环遍历分组
# 存储每个ID对应的格式化字符串 result_segments = [] # 按ID分组处理 for id_num, group in df.groupby('id'): # 格式化当前分组内的每个公司条目 company_strings = [f"{row['company_name']} ({row['acceptance_rate']}%)" for _, row in group.iterrows()] # 拼接成ID开头的片段 segment = f"{id_num} {' ; '.join(company_strings)}" result_segments.append(segment) # 把所有片段拼接成最终输出 final_output = ' '.join(result_segments) print(final_output)
方法2:更简洁的groupby+apply
如果你喜欢更紧凑的代码,可以用apply来处理分组:
def format_group(group): # 格式化分组内的每个条目 entries = group.apply(lambda x: f"{x['company_name']} ({x['acceptance_rate']}%)", axis=1) # 返回ID+拼接后的条目 return f"{group['id'].iloc[0]} {' ; '.join(entries)}" # 生成最终输出 final_output = ' '.join(df.groupby('id').apply(format_group)) print(final_output)
输出结果
两种方法都会得到你期望的格式:
24922 YES BANK LTD (97%) ; NOMURA SECURITIES CO LTD (91%) 24924 ZENSAR TECHNOLOGIES LTD (97%) 25096 TUI AG (94%) ; CITIGROUP INC (93%) ; UBS INVESTMENT BANK (91%)
你之前出错的原因推测
你提到每一行都只输出"world acceptance rate",大概率是这两个问题之一:
- 没有按ID分组,直接遍历每一行时,错误地引用了整个列(比如写了
df['world acceptance rate']而非row['world acceptance rate']) - 没有处理同ID下的多行数据,导致每个行单独输出,没有把同一ID的条目整合在一起
内容的提问来源于stack exchange,提问作者Achillies
相关产品推荐
相关产品推荐

