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
相关产品推荐
相关产品推荐

