我有一个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
上,最简单,最快的方法是什么?
答案 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等效项,与往常一样,速度稍快,但我觉得很难阅读。