panda根据另一列的条件选择性地覆盖列中的值

2024-05-10 01:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas中有一个四列的数据帧。数据由字符串组成。样品:

          A                  B                C      D
0         2          asicdsada          v:cVccv      u
1         4     ascccaiiidncll     v:cVccv:ccvc      u
2         9                sca              V:c      u
3        11               lkss             v:cv      u
4        13              lcoao            v:ccv      u
5        14           wuduakkk         V:ccvcv:      u

如果D列中的C列包含子字符串“V”(区分大小写),我想用字符串“a”替换D列中的字符串“u”。 预期结果:

^{pr2}$

我更喜欢覆盖D列中已经存在的值,而不是分配两个不同的值,因为我希望稍后在不同的条件下有选择地再次覆盖这些值中的一些值。

似乎这应该有一个简单的解决办法,但我想不出来,并没有找到一个完全适用的解决办法,在其他回答的问题。在

df.ix[1]["D"] = "a"

更改单个值。在

df.ix[:]["C"].str.contains("V")

返回一系列布尔值,但我不确定如何处理它。我试过很多种组合。loc,apply,contains,搜索,和for循环,我要么得到错误,要么替换D列中的每个值。我是pandas/python的新手,所以很难知道我的语法、方法或者我需要做的事情的概念化是否关闭了(可能以上都是)。


Tags: 数据字符串pandasdf样品cvixcontains
1条回答
网友
1楼 · 发布于 2024-05-10 01:28:04

正如您已经尝试过的那样,使用str.contains获得一个布尔序列,然后使用.loc来表示“更改这些行和D列”。例如:

In [5]: df.loc[df["C"].str.contains("V"), "D"] = "a"

In [6]: df
Out[6]: 
    A               B             C  D
0   2       asicdsada       v:cVccv  a
1   4  ascccaiiidncll  v:cVccv:ccvc  a
2   9             sca           V:c  a
3  11            lkss          v:cv  u
4  13           lcoao         v:ccv  u
5  14        wuduakkk      V:ccvcv:  a

(避免使用.ix它现在已经正式弃用了。)

相关问题 更多 >