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

时间:2018-10-26 22:54:12

标签: python pandas

我有一个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〜2000 data frame上,最简单,最快的方法是什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

我可能使用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.where等效项,与往常一样,速度稍快,但我觉得很难阅读。