如何在Pandas中让DataFrame相同城市仅显示一次并导出为CSV?
如何用Pandas实现相同城市值仅在中间行显示并导出CSV?
原始数据
假设我们有如下Pandas DataFrame:
import pandas as pd df = pd.DataFrame({ 'City': ['Texas', 'Texas', 'Texas'], 'Age': [20, 35, 30], 'column1': [7, 8, 8], 'column2': [5, 1, 2] })
输出结果:
City Age column1 column2 0 Texas 20 7 5 1 Texas 35 8 1 2 Texas 30 8 2
需求
将City列中相同城市值仅在组内中间行显示,其余行对应单元格留空,其他列保持不变,处理后效果如下:
City Age column1 column2 0 20 7 5 1 Texas 35 8 1 2 30 8 2
最终将处理后的DataFrame保存为CSV文件。
解决方案
可以通过Pandas的分组(groupby)和自定义函数实现该需求,步骤如下:
1. 定义分组处理函数
编写函数对每个城市组进行处理,仅保留组内中间行的City值,其余行设为空字符串:
def set_middle_city(group): group_len = len(group) if group_len == 0: return group # 计算中间行索引:奇数长度取正中间,偶数长度取第n//2行(可按需调整) middle_index = group.index[group_len // 2] # 将非中间行的City值置为空 group.loc[group.index != middle_index, 'City'] = '' return group
2. 应用分组处理
对DataFrame按City分组,应用上述函数:
processed_df = df.groupby('City', group_keys=False).apply(set_middle_city)
执行后即可得到目标格式的DataFrame,输出结果与需求一致。
3. 导出为CSV文件
将处理后的DataFrame保存为CSV,注意保留空单元格:
# index=False 表示不导出行索引 processed_df.to_csv('processed_data.csv', index=False)
扩展说明
- 该方案支持多城市分组场景,每个城市组会自动计算中间行并保留对应
City值 - 若需调整偶数行的中间位置(比如4行时取第2或第3行),可修改
middle_index的计算逻辑,例如改为group.index[(group_len - 1) // 2]取上中间行
内容的提问来源于stack exchange,提问作者Moon Lee
相关产品推荐
相关产品推荐

