熊猫groupby并应用自定义功能比较两列以更改另一列

时间:2020-05-04 01:25:21

标签: python pandas pandas-groupby

我有一个数据框,需要按id分组,然后在这些组中比较AB列以更改列C

这是我的代码:

def alter_C(row):
    if row['A'].shift(1) == row['B'] :
           row['C'] = 'new_value'
           return row

df = df.groupby(id).apply(alter_C)

我得到了错误:

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

apply之后使用groupby时,该函数的输入将是一个数据帧。因此,函数中的row不是一行。您可以通过运行type(row)进行检查,这将为您提供<class 'pandas.core.frame.DataFrame'>

因此,在更改row列时,我们需要将C视为数据帧。可以完成以下操作:

def alter_C(df_group):
    df_group.loc[df_group['A'].shift(1) == df_group['B'], 'C'] = 'new_value'
    return df_group

df = df.groupby('id').apply(alter_C)