当除两列以外的所有列的值都匹配时,如何替换列的值?

2024-04-26 09:18:21 发布

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

我有这样一个数据框:

       iv_1  iv_2  iv_3  iv_4  iv_5  col2rplc  idenifier
0       0      0     0     0     0      a          1
333     0      0     0     0     0      b          0
      ......
222     1      2     3     4     5      aa         1
324     1      2     3     4     5      cc         0
      ......
1234    1      0     0     0     1      a          1
1235    0      2     0     4     0      a          1
1236    0      0     3     0     0      a          1
1237    0      0     1     0     0      b          o
1238    0      2     0     2     0      b          o
1239    3      0     0     0     3      b          o

这是两个串联的数据帧。标识符列标识特定行来自哪个集合,集合1或集合0。我想用set_1的值替换集合_0中所有列具有相同值的所有行中的col2rplc列的值。因此,在上面的例子中,对于前两行,我希望用a替换b;我希望cc被aa取代;而col2rplc列的所有剩余行(行中没有相同的值)保持不变

我该怎么做


1条回答
网友
1楼 · 发布于 2024-04-26 09:18:21

使用duplicated标识重复的行,然后使用maskffill

# sort the data accodringly
df = df.sort_values(['iv_1','iv_2','iv_3','iv_4','iv_5', 'idenifier'],
                    ascending=False)

mask = df.duplicated(df.columns[:5])
df['col2rplc'] = df['col2rplc'].mask(mask).ffill()

输出(注意,在最后几行中有一个额外的副本,您在问题中没有提到):

      iv_1  iv_2  iv_3  iv_4  iv_5 col2rplc  idenifier
0        0     0     0     0     0        a          1
222      1     2     3     4     5       aa          1
324      1     2     3     4     5       aa          0
333      0     0     0     0     0        a          0
1234     1     0     0     0     1        a          1
1235     0     2     0     2     0        a          1
1236     0     0     3     0     0        a          1
1237     0     0     1     0     0        b          0
1238     0     2     0     2     0        a          0
1239     3     0     0     0     3        b          0

相关问题 更多 >