在 Pandas 中根据特定条件将值从一列复制到同一行的其他列

2024-09-26 22:07:36 发布

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

我有一个data frame如下所示:

import pandas as pd

df = pd.DataFrame({'ID':['M001','M002','M003','M004','M005'],
                      'X001':[0,0,1,0,0],
                      'X002':[0,0,1,1,0],
                      'X003':[0,0,1,0,1],
                      'X004':[1,0,1,0,0],
                      'X005':[1,0,1,1,0]})

print(df)

看起来是这样的:

     ID  X001  X002  X003  X004  X005
0  M001     0     0     0     1     1
1  M002     0     0     0     0     0
2  M003     1     1     1     1     1
3  M004     0     1     0     0     1
4  M005     0     0     1     0     0

我要做的是将ID列中的值复制到其他列中,该列中的值为1,如下所示

     ID  X001  X002  X003  X004  X005
0  M001     0     0     0  M001  M001
1  M002     0     0     0     0     0
2  M003  M003  M003  M003  M003  M003
3  M004     0  M004     0     0  M004
4  M005     0     0  M005     0     0

在~2000 x~2000data frame上,最简单、最快的方法是什么


Tags: iddfdataframepdm001x004x005
2条回答

下面是一种方法,将1替换为空值,使用fillna进行转置,然后转置回:

df.T.replace(1,pd.np.nan).fillna(df['ID']).T

     ID  X001  X002  X003  X004  X005
0  M001     0     0     0  M001  M001
1  M002     0     0     0     0     0
2  M003  M003  M003  M003  M003  M003
3  M004     0  M004     0     0  M004
4  M005     0     0  M005     0     0

我可以使用where,例如:

In [218]: df.where(df != 1, df.ID, axis=0)
Out[218]: 
     ID  X001  X002  X003  X004  X005
0  M001     0     0     0  M001  M001
1  M002     0     0     0     0     0
2  M003  M003  M003  M003  M003  M003
3  M004     0  M004     0     0  M004
4  M005     0     0  M005     0     0

有一个np,和通常一样,它的速度稍微快一点,但我发现它更难阅读

相关问题 更多 >

    热门问题