如何在Pandas DataFrame首尾添加两行全0数据并重置索引?
问题
我有一个名为df_x的Pandas DataFrame,创建代码如下:
# create DataFrame df_x = pd.DataFrame({'logvalue': ['20', '20.5', '18.5', '2', '10'], 'ID': ['1', '2', '3', '4', '5']})
需要完成以下操作:
- 在DataFrame的开头和结尾各添加一行全0数据
- 新增
violatedInstances列,取值与示例一致 - 重新整理DataFrame的索引
期望输出表格:
| logvalue | ID | violatedInstances |
|---|---|---|
| 0 | 0 | 0 |
| 20 | 1 | 0 |
| 20.5 | 2 | 1 |
| 18.5 | 3 | 0 |
| 2 | 4 | 1 |
| 10 | 5 | 1 |
| 0 | 0 | 0 |
解决方案
通过Pandas的concat方法和列赋值即可实现,步骤如下:
新增
violatedInstances列
根据示例给定的取值直接赋值,若有判断规则可替换为条件逻辑:df_x['violatedInstances'] = [0, 1, 0, 1, 1]构造首尾全0行
创建与原DataFrame列名完全匹配的单行DataFrame:top_row = pd.DataFrame({'logvalue': ['0'], 'ID': ['0'], 'violatedInstances': [0]}) bottom_row = pd.DataFrame({'logvalue': ['0'], 'ID': ['0'], 'violatedInstances': [0]})合并数据并重置索引
使用pd.concat合并首尾行与原数据,通过ignore_index=True自动重置索引:result_df = pd.concat([top_row, df_x, bottom_row], ignore_index=True)
完整可运行代码
import pandas as pd # 创建原DataFrame df_x = pd.DataFrame({'logvalue': ['20', '20.5', '18.5', '2', '10'], 'ID': ['1', '2', '3', '4', '5']}) # 添加目标列 df_x['violatedInstances'] = [0, 1, 0, 1, 1] # 构造首尾全0行 top_row = pd.DataFrame({'logvalue': ['0'], 'ID': ['0'], 'violatedInstances': [0]}) bottom_row = pd.DataFrame({'logvalue': ['0'], 'ID': ['0'], 'violatedInstances': [0]}) # 合并并重置索引 result_df = pd.concat([top_row, df_x, bottom_row], ignore_index=True) # 打印结果 print(result_df)
扩展说明
如果violatedInstances的取值需要根据logvalue的数值判断(比如示例中20.5、2、10对应1),可改用条件赋值:
# 转换logvalue为数值类型后判断 df_x['violatedInstances'] = df_x['logvalue'].astype(float).apply( lambda x: 1 if x in [20.5, 2, 10] else 0 )
内容的提问来源于stack exchange,提问作者Niro Mal
相关产品推荐
相关产品推荐

