将索引值复制到coloumns,其中pandas中的单元格值不为零

时间:2018-02-13 11:06:54

标签: pandas dataframe

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

<ComboBox Name="test" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" IsReadOnly="True" >
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter},ConverterParameter=Value}"/>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>

我希望它看起来像这样

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 

基本上我想用该特定行的相应索引元素替换非零值

我怎样才能以最简单的方式做到这一点

EDIT1

有没有办法保留非零值和索引值 例如,我希望它像

 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 

如果不完全采用相同的格式,那么这是可以接受的,但我也希望有这个数字

2 个答案:

答案 0 :(得分:2)

axis=0使用DataFrame.whereDataFrame.mask

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

答案 1 :(得分:1)

这也可以用类似的方式完成工作:

df[df>0] = df.index.tolist()