Как суммировать столбец в подмножестве кадра данных панд - PullRequest
0 голосов
/ 07 октября 2018

Я очень новичок в Python и его применении к ГИС.

Используя ноутбук Jupyter, я имею дело с набором данных, слишком большим, чтобы его можно было открыть с помощью Excel.В нем почти 800000 строк и 61 столбец.

Теперь мне нужно запросить фрейм данных, чтобы создать интересующее подмножество, в данном случае 2 столбца: OBJECTID и Landuse, каждый из которых соответствует определенному диапазону.:

import pandas
df = pd.read_csv('.big file.csv')
grass_ID4440 = df[(df.OBJECTID == 4440) & (df.Landuse == 'Grass - Urban')]

Это подмножество выплевывает 38 строк.Теперь, если бы я хотел суммировать площадь только этих 38 строк, какую логику / подход я должен использовать?

Вот мое мышление:

area_ID4440 = grass_ID4440['Area'].sum()

Это явно неправильно с точки зрения логикипотому что он выплевывает сумму ОБЩЕЙ области всего набора данных.

Заранее спасибо!

1 Ответ

0 голосов
/ 07 октября 2018

Ваша логика должна работать нормально.Но стоит отметить, что вам следует избегать цепного индексирования, явно не рекомендуется в документах, где это возможно.Это устраняет неоднозначность использования копии и представления, но также делает вашу логику более ясной.

Существует несколько вариантов: -

Повторное использование логического индексирования

Распространенный методсостоит в том, чтобы вычислить логическую маску (дорогая часть) и повторно использовать ее в последующих вычислениях:

mask = (df['OBJECTID'] == 4440) & (df['Landuse'] == 'Grass - Urban')
grass_ID4440 = df[mask]  # this is a view based on df
area_ID4440 = df.loc[mask, 'Area'].sum()  # scalar output

Сделать явную копию

Таким образом, любые изменения в вашем фрагменте данных не повлияют на вашисходный кадр данных:

mask = (df['OBJECTID'] == 4440) & (df['Landuse'] == 'Grass - Urban')
grass_ID4440 = df[mask].copy()  # this is a copy, changes will not be reflected in df
area_ID4440 = df.loc[mask, 'Area'].sum()  # scalar output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...