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

如何在DataFrame中新增列?附预期效果示例

解决DataFrame新增NewColumn的需求

先结合你给出的示例,我梳理出NewColumn的生成逻辑:

  • 按Name分组处理(示例为单一组A,代码支持多组场景)
  • 组内数据先从Date列提取年份并排序
  • 逐行判断规则:
    • 若当前行是组内最早年份,或前一年无对应数据(比如示例中2006年没有2005年的记录),NewColumn留空
    • 当前Value大于前一年Value时,NewColumn设为1
    • 当前Value小于前一年Value时,NewColumn设为0
    • 两者相等时,NewColumn留空(对应示例中2004-06的情况)

下面是具体的Pandas实现步骤:

步骤1:预处理日期列

先把Date转为datetime格式并提取年份,方便后续按年匹配:

import pandas as pd

# 转换Date列为datetime类型(如果还未转换)
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m')
# 提取年份到临时列
df['Year'] = df['Date'].dt.year

步骤2:分组匹配上一年数据

按Name分组后,通过合并表的方式匹配每组内上一年的Value:

# 按Name和年份排序,保证顺序正确
df_sorted = df.sort_values(['Name', 'Year']).reset_index(drop=True)

# 创建上一年的匹配表:年份+1,并重命名Value列
prev_year_df = df_sorted.copy()
prev_year_df['Year'] += 1
prev_year_df = prev_year_df.rename(columns={'Value': 'Prev_Value'})

# 合并原表与上一年表,匹配Name和Year
merged_df = pd.merge(
    df_sorted, 
    prev_year_df[['Name', 'Year', 'Prev_Value']], 
    on=['Name', 'Year'], 
    how='left'
)

步骤3:生成目标列NewColumn

根据匹配到的上一年数据,用条件判断生成NewColumn:

import numpy as np

merged_df['NewColumn'] = np.where(
    merged_df['Prev_Value'].isna(),  # 无匹配上一年数据的情况
    np.nan,
    np.where(merged_df['Value'] > merged_df['Prev_Value'], 1,
             np.where(merged_df['Value'] < merged_df['Prev_Value'], 0, np.nan))
)

# 清理临时列,还原原表结构
final_df = merged_df.drop(['Year', 'Prev_Value'], axis=1)

验证示例数据

用你给出的测试数据验证:

# 示例数据
data = {
    'Name': ['A', 'A', 'A', 'A', 'A', 'A'],
    'Date': ['2000-01', '2001-03', '2002-02', '2003-05', '2004-06', '2006-03'],
    'Value': [0.5, 0.4, 1.0, 0.9, 0.9, 0.4]
}
df = pd.DataFrame(data)

运行代码后,final_df的NewColumn会和示例完全一致:

NameDateValueNewColumn
A2000-01-010.5NaN
A2001-03-010.40
A2002-02-011.01
A2003-05-010.90
A2004-06-010.9NaN
A2006-03-010.4NaN

如果你的实际数据中同一年有多条记录,可先通过df.groupby(['Name', 'Year'])['Value'].last().reset_index()聚合,再执行后续步骤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:07:47