pandas - 将索引值复制到 pandas 中单元格值非零的列

标签 pandas dataframe

我有一个看起来像这样的数据框

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.whereDataFrame.maskaxis=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

对于您的编辑 - 使用addradd从右侧添加:

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/

相关文章:

python - 根据日期索引上的 df1 更新 df2 中的列

python - 根据当前日期添加和计算行的非零值

python-3.x - Pandas - 有条件的删除重复项

python - Pandas dataframe - 将列值转换为单独的列

r - 在 R 中使用函数的输入作为变量名

python - 按重复项对 DataFrame 的行进行排序

python - 用于 Pandas `idxmax` 方法的时间复杂度/算法

python - 从表列中提取数据并在 Python 中创建变量

python - 当 'ID' 为 1 时,如何创建一个新列插入分组列 'interaction'(及时)的单元格值

python - 比较一行中的值并将结果写入新列