pandas dataframe - 根据列标题更改值

Ton*_*ony 6 python pandas

我有一个dataframe看起来如下:

In [74]: data2

Out[74]: 
            a  b  c

2012-06-12  0  1  1
2012-06-13  1  1  0
2012-06-14  1  0  1
2012-06-15  1  0  1
2012-06-16  1  1  0
2012-06-17  1  0  1
Run Code Online (Sandbox Code Playgroud)

有没有办法使值=列标题值= 1?

结果df:

            a  b  c

2012-06-12  0  b  c
2012-06-13  a  b  0
2012-06-14  a  0  c
2012-06-15  a  0  c
2012-06-16  a  b  0
2012-06-17  a  0  c
Run Code Online (Sandbox Code Playgroud)

然后删除= 0的值,使df减少到2列:(此时列标题不相关)

结果df:

            1  2  
2012-06-12  c  b  
2012-06-13  a  b  
2012-06-14  a  c  
2012-06-15  a  c  
2012-06-16  a  b  
2012-06-17  a  c  
Run Code Online (Sandbox Code Playgroud)

Wes*_*ney 6

你也可以召唤一些更深的熊猫 - 并做:

In [28]: df.apply(lambda x: x.astype(object).replace(1, x.name))
Out[28]: 
            a  b  c
2012-06-12  0  b  c
2012-06-13  a  b  0
2012-06-14  a  0  c
2012-06-15  a  0  c
2012-06-16  a  b  0
2012-06-17  a  0  c
Run Code Online (Sandbox Code Playgroud)


jro*_*uie 5

from pandas import *
df = DataFrame([[0, 1, 1], [1, 1, 0], [1, 0, 1],], columns=['a','b','c'])

foo = []
for i in df.index:
    foo.append( df.columns[df.ix[i] == 1])
DataFrame(foo, index = df.index)
Run Code Online (Sandbox Code Playgroud)

哪个回报:

   0  1
0  b  c
1  a  b
2  a  c
Run Code Online (Sandbox Code Playgroud)