2012-08-12 8 views
5

Mam dataframe że wygląda następującą:pandy dataframe - Wartości zmiany oparte na nagłówek kolumny

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 

Czy istnieje sposób, aby wartości = nagłówek kolumny, gdzie wartość = 1?

Wynik 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 

a następnie usunąć wartości, które = 0 takie, że df redukuje do 2 kolumny: (nagłówek kolumny nie ma znaczenia w tym momencie)

Wynik 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 

Odpowiedz

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) 

które zwraca:

0 1 
0 b c 
1 a b 
2 a c 
6

Można również przywołać jakieś głębsze pandy-fu i zrobić:

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 
Powiązane problemy