You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将非零Value2列值合并至Value1列并重构DataFrame

pandas 按条件将Value2非零值拆分为新行的实现

按以下步骤处理即可完全匹配预期输出:

  • 先筛选出所有Value2不等于0的行,将这些行的test_ID统一设为99,取值列替换为原行的Value2值,作为待新增的行
  • 把原DataFrame的Value2列删除,和上一步生成的新行做拼接
  • 保留原始行的先后顺序,重置索引即可得到最终结果

完整可运行代码:

import pandas as pd

# 构造示例数据
array = {'test_ID': [10, 13, 10, 13, 16],
         'test_date': ['2010-09-05', '2010-10-23', '2011-09-12', '2010-05-05', '2010-06-01'],
         'Value1': [40, 56, 23, 78, 67],
         'Value2': [25, 0, 68, 0, 0]}
df = pd.DataFrame(array)

# 生成需要新增的行
add_rows = df.loc[df['Value2'] != 0, ['test_ID', 'test_date', 'Value2']].copy()
add_rows['test_ID'] = 99
add_rows = add_rows.rename(columns={'Value2': 'Value1'})

# 拼接并保序排序
res = pd.concat(
    [df.drop(columns='Value2'), add_rows],
    ignore_index=False
).sort_index(kind='stable').reset_index(drop=True)

运行后res的输出和预期完全一致:

test_ID   test_date  Value1
0       10  2010-09-05      40
1       99  2010-09-05      25
2       13  2010-10-23      56
3       10  2011-09-12      23
4       99  2011-09-12      68
5       13  2010-05-05      78
6       16  2010-06-01      67

注意:排序时指定kind='stable'是为了保证相同原始索引下,原表的行始终排在新增行前面,不会打乱原有行的相对顺序,不需要额外自定义排序规则。

内容的提问来源于stack exchange,提问作者gtomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:48:10