Pandas:移除'two'列含0的行并添加两行空行
解决方案
可以用 Pandas 实现需求,核心思路是先将连续的非0行划分为不同分组,再将分组内容拼接并添加空行分隔。以下是完整代码:
import pandas as pd # 读取数据(实际使用时替换为你的文件路径,比如pd.read_csv('your_data.txt', sep=r'\s+')) data = """one two three 1 4 4 3 5 5 5 7 5 666 0 6 785 0 8 455 0 9 454 0 9 12 2 8 23 5 9 2 3 7 1 5 5 123 0 7 123 0 7 3 5 5""" df = pd.read_csv(pd.compat.StringIO(data), sep=r'\s+') # 1. 生成分组标识:将被0行分隔的连续非0行归为同一组 df['group_id'] = (df['two'] == 0).cumsum() # 2. 过滤掉two列值为0的行 filtered = df[df['two'] != 0].drop(columns=['group_id']) # 3. 按分组拆分数据,拼接时添加两行空行分隔 result_parts = [] for _, group in filtered.groupby((df['two'] == 0).cumsum()[df['two'] != 0]): result_parts.append(group.to_string(index=False)) final_result = '\n\n\n'.join(result_parts) print(final_result)
步骤解释
- 分组标识生成:通过
(df['two'] == 0).cumsum()生成分组ID,每遇到一个值为0的行,累积和就加1,这样连续的非0行就会被分配到同一个ID下。 - 过滤数据:直接筛选出
two列不为0的行,保留有效数据。 - 拼接分组:将每个分组转换成不带索引的字符串,用
'\n\n\n'连接(对应两行空行的格式),最终得到符合要求的输出。
运行代码后,输出结果与你给出的期望格式完全一致。
内容的提问来源于stack exchange,提问作者fae
相关产品推荐
相关产品推荐

