2016-12-02 2 views
0

У меня есть общий вопрос о пандах. У меня есть DataFrame с именем d с большим количеством информации о парках. Все уникальные имена парков хранятся в массиве с именем parks. Есть еще один столбец с идентификатором местоположения, и я хочу перебирать массив парков и печатать уникальные идентификаторы идентификаторов местоположений, связанные с этим именем парка.Сохранение сгруппированных данных с переменной

d[d['Park']=='AKRO'] 
len(d['Location'].unique()) 

дает мне отсчет 24824.

x = d[d['Park']=='AKRO'] 
print(len(x['Location'].unique())) 

дает мне счетчик 1. Почему местоположение? Я думал, что это то же самое, за исключением того, что я храню информацию в переменной.

Так что, естественно, цикл, который я пытался, не работает. У кого-нибудь есть подсказки?

counts=[] 
for p in parks: 
    x= d[d['Park']==p] 
    y= (len(x['Location'].unique())) 
    counts.append([p,y]) 

ответ

1

При подмножестве в первый раз вы не назначаете d[d['Park'] == 'ARKO'] на что угодно. Таким образом, вы фактически не изменили данные. Вы просмотрели только этот раздел данных.

Когда вы назначаете x = d[d['Park']=='AKRO'], x - это только тот раздел, который вы просматривали с помощью первой команды. Вот почему вы получаете разницу, которую вы наблюдаете.

Ваш цикл for на самом деле только перебирает столбцы d. Если вы хотите перебрать строки, вы можете использовать следующее.

for idx, row in d.iterrows(): 
    print(idx, row) 

Однако, если вы хотите подсчитать количество мест с циклом for, вам необходимо пройти через каждый парк. Что-то вроде следующего.

for park in d['Park'].unique(): 
    print(park, d.loc[d['Park'] == park, 'Location'].size()) 

Вы можете выполнить свою задачу без итерации. Такой подход является предпочтительным.

d.groupby('Park')['Location'].nunique() 
1

Вы можете попробовать что-то вроде,

d.groupby('Park')['Location'].nunique() 
1

Будьте осторожны с функциями DataFrame Panda, для которого производят изменение встроенного или нет. Например, d[d['Park']=='AKRO'] фактически не изменяет DataFrame d. Однако x = d[d['Park']=='AKRO'] устанавливает выход d[d['Park']=='AKRO'] в x, так что x теперь имеет только 1 место.

Вы проверили вручную количество уникальных идентификаторов местоположения для «AKRO»? Цикл обработки выглядит правильно вне дополнительных кронштейнов вокруг y= len(x['Location'].unique())

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