如何在Pandas DataFrame每一行后插入两行以重塑数据?
如何在Pandas DataFrame每行后插入两行并按规则重塑?
需求说明
对现有DataFrame执行如下转换:
- 原DataFrame的每一行后插入两行新数据
- 插入的两行需遵循规则:
- 第一列(
name)保持与原行相同的值 - 第二列(
value)第一行固定为0,第二行固定为None
- 第一列(
原数据与初始输出
原数据代码:
import pandas as pd data = [ ['A',1], ['B',2], ['C',3], ['D',4] ] df = pd.DataFrame(data,columns=['name','value']) print(df)
初始输出:
name value 0 A 1 1 B 2 2 C 3 3 D 4
解决方案1:利用explode展开列表
将每行的value转换为包含目标三个值的列表,再通过explode拆分成行:
# 为每行生成包含原value、0、None的列表 df['value'] = df['value'].apply(lambda x: [x, 0, None]) # 展开列表为单独行并重置索引 result_df = df.explode('value', ignore_index=True) print(result_df)
解决方案2:重复行后按索引替换值
先将每行重复三次,再根据索引位置替换对应value值:
# 重复每行三次并重置索引 result_df = df.loc[df.index.repeat(3)].reset_index(drop=True) # 替换索引模3余1的行(每行的第二行)为0 result_df.loc[result_df.index % 3 == 1, 'value'] = 0 # 替换索引模3余2的行(每行的第三行)为None result_df.loc[result_df.index % 3 == 2, 'value'] = None print(result_df)
预期输出
两种方案都会得到如下结果:
name value 0 A 1 1 A 0 2 A None 3 B 2 4 B 0 5 B None 6 C 3 7 C 0 8 C None 9 D 4 10 D 0 11 D None
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

