我有一个数据框,需要按id
分组,然后在这些组中比较A
和B
列以更改列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()。
可以帮忙吗?
答案 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)