我有一个看起来像这样的数据框
Index Z1 Z2 Z3 Z4
A 0 0 1 3
B 0 2 0 0
C 2 0 1 0
D 4 0 3 0
E 0 0 2 0
我希望它看起来像这样
Index Z1 Z2 Z3 Z4
A 0 0 A A
B 0 B 0 0
C C 0 C 0
D D 0 D 0
E 0 0 E 0
基本上我想用该特定行的相应索引元素替换非零值
我怎样才能以最简单的方式做到这一点
编辑1
有什么方法可以保留非零值和索引值 例如我希望它像
Index Z1 Z2 Z3 Z4
A 0 0 A(1) A(3)
B 0 B 0 0
C C(2) 0 C(1) 0
D D(4) 0 D(3) 0
E 0 0 E(2) 0
如果格式不完全相同也是可以接受的,但我也希望有号码
最佳答案
使用DataFrame.where
或DataFrame.mask
与axis=0
:
df = df.where(df == 0, df.index.to_series(), axis=0)
或者:
df = df.mask(df != 0, df.index.to_series(), axis=0)
print (df)
Z1 Z2 Z3 Z4
Index
A 0 0 A A
B 0 B 0 0
C C 0 C 0
D D 0 D 0
E 0 0 E 0
df1 = df.astype(str).add(')').radd('(').radd(df.index.to_series(), 0)
df = df.where(df == 0, df1)
print (df)
Z1 Z2 Z3 Z4
Index
A 0 0 A(1) A(3)
B 0 B(2) 0 0
C C(2) 0 C(1) 0
D D(4) 0 D(3) 0
E 0 0 E(2) 0
关于pandas - 将索引值复制到 pandas 中单元格值非零的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765358/