0

有了这个数据框

一个 C
'数据' 2 3
'刀塔' 3 4

我想根据 A 列中的值修改 B 列和 C 列中的值。目前我可以使用类似

df['B'] = df['A'].map(lambda x: cache[x]['mapVal'])
df['C'] = df['A'].map(lambda x: cache[x]['diffMapVal'])

在这种情况下,B 列和 C 列的值依赖于 A 列的值。它们还需要一个基于它们自己的列的唯一键(例如,B 有自己的键,C 有自己的键)。

为了在混合中加入另一个转折,如果foo 是谓词并且 val 给出我们所在行的列 B 的值,则在某些条件下应该修改B 和 C。foo(val(B)) == True

所以基本上任务是

if foo(B) and foo(C) then continue
set value of B equal to cache[val(A)][keyOfB]
set value of C equal to cache[val(A)][keyOfC]

在看了几个问题之后,这个问题似乎很重要。但是我不太清楚如何访问数据框中 A 的值,因为它正在被 where 语句过滤。

谢谢

4

1 回答 1

1

使用applywithaxis=1来逐行应用你的逻辑

def func(row):
   if not foo(row.B):
      row['B'] = cache[row.A]['mapVal']
   if not foo(row.C):
      row['C'] = cache[row.A]['diffMapVal']
   return row 

df = df.apply(func, axis=1)
于 2021-11-04T21:51:41.573 回答