2013-10-03 2 views
-2
  AES AIG AIV 
1/3/2008   1 
2/6/2008  1  
2/11/2008  1 1 


!cat dd.csv 
,AES,AIG,AIV 
1/3/2008 16:00,,1, 
2/6/2008 16:00,1,, 
2/11/2008 16:00,1,,1 

import pandas as pd 
import numpy as np 
s_input_file = 'dd1.csv' 
df = pd.read_csv(s_input_file, sep=',',header=0) #orders.csv 

def getcell(x): 
    if (x==1.0 and df.ix[x, df.ix[x]==1.0].values[0]==1.0): 
     print x, df.ix[x, df.ix[x]==1.0].index[0], df.ix[x][0] 

df.applymap(getcell) 

Got правильно 4 отсчетов выхода, но не имея в виде правые указательных строк и цв «Как напечатать индекс строки и столбец, где ячейки == 1?»Как использовать метод Панды DataFrame.applyMap

1.0 AES 2/6/2008 16:00 
1.0 AES 2/6/2008 16:00 
1.0 AES 2/6/2008 16:00 
1.0 AES 2/6/2008 16:00 

Как я могу получить ожидаемый результат, как так:

1/3/2008, AIG 
    2/6/2008, AES 
    2/11/2008, AES 
    2/11/2008, AIG 
+0

Просьба уточнить ваш вопрос. В частности, результат, который вы поставили в конце, кажется, не то, что вы хотите. – cd98

+0

Добавленный ожидаемый результат – Andrey

+0

Не лучше ли было бы исключить пробелы в этом примере? – Ryflex

ответ

0

То, что вы пытаетесь сделать с applymap не будет работать, так как параметр является значение ячейки, которая передается в, у вас нет знаний о том, из какой строки или столбца стоит значение, поэтому ваш код просто печатает одно и то же значение четыре раза.

То, что вы хотите сделать, это итерация по каждой строке и столбце, проверить значение для NaN и напечатать значение индекса и имя столбца

for index in df.index: 
    for col in df.columns: 
     if notnull(df.loc[index,col]): 
      print index, col 

# outputs 

1/3/2008 16:00 AIG 
2/6/2008 16:00 AES 
2/11/2008 16:00 AES 
2/11/2008 16:00 AIV 

Также просто Критике код:

df = pd.read_csv(s_input_file, sep=',',header=0) #orders.csv 
# the above can be changed to the more compact 
df = pd.read_csv(s_input_file) # sep and header have default values that will work for you 

def getcell(x): 
    if (x==1.0 and df.ix[x, df.ix[x]==1.0].values[0]==1.0): 
        ^well this does not do what you think 

Вы пытаетесь индексировать, используя .ix, но то, что вы получаете, является значением ячейки, поэтому оно будет NaN или 1.0, так что это неправильно, вы должны использовать .loc для индексации этикеток или .iloc для индексирования с использованием целочисленных индексов. Также я не уверен, почему вы выполняете сравнение значений с помощью df.ix[x]==1.0], а затем вызываете .values[0]=1.0 ??

 print x, df.ix[x, df.ix[x]==1.0].index[0], df.ix[x][0] 

С выше кода снова неправильного предположения о том, что .ix делает делается здесь, и вы просто напечатать ту же строку каждый раз.

Смежные вопросы