是否通过迭代覆盖Pandas DataFrame中的值?

max*_*max 2 python pandas

我有一个这样的数据框:

lis = [['a','b','c'],
       ['17','10','6'],
       ['5','30','x'],
       ['78','50','2'],
       ['4','58','x']]
df = pd.DataFrame(lis[1:],columns=lis[0])
Run Code Online (Sandbox Code Playgroud)

我该如何写一个函数,说如果[x]在[c]列中,然后用[b]列中的相应值覆盖该值。结果将是这样的:

[['a','b','c'],
['17','10','6'],
['5','30','30'],
['78','50','2'],
['4','58','58']]
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 5

通过使用.locnp.where

import numpy as np
df.c=np.where(df.c=='x',df.b,df.c)
df
Out[569]: 
    a   b   c
0  17  10   6
1   5  30  30
2  78  50   2
3   4  58  58
Run Code Online (Sandbox Code Playgroud)

  • @max df.c =='x'返回布尔值,则可以考虑if else语句,如果为true,则返回df.b else else返回df.c \ (2认同)