Получить среднее значение в столбце данных без использования цикла while - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь найти сумму данных о ценах во фрейме данных.Мой текущий код выглядит так, что должен быть лучший способ сделать это

i=5
a = 0
while i<10
    a = a + df.loc[i]["Price"]
    i = i + 1
averg = a/5
print(averg)

Ответы [ 3 ]

0 голосов
/ 06 октября 2018
>>> import pandas as pd

>>> df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=["Price", "Weight", "Size"])
>>> df
   Price  Weight  Size
0      1       2     3
1      4       5     6
2      7       8     9

>>> df.mean()
Price     4
Weight    5
Size      6
dtype: int64

>>> df["Price"].mean()
4
0 голосов
/ 06 октября 2018

Первое замечание: вам следует избегать цепной индексации.Это неоднозначно и явно не рекомендуется в документах, и вместо этого вы можете использовать pd.DataFrame.at.Кроме того, вы можете использовать оператор += для увеличения значения.Таким образом, вы можете переписать как:

i = 5
a = 0
while i < 10
    a += df.at[i, 'Price']
    i += 1
avg = a/5
print(avg)

Тем не менее, обратите внимание, что вы можете использовать pd.DataFrame.loc, чтобы объединить строку и индексную маркировку и дать объект pd.Series.Затем вы можете использовать pd.Series.mean для вычисления среднего:

avg = df.loc[5:10, 'Price'].mean()

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

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

Использование циклов на фреймах данных очень неэффективно.Попробуйте использовать векторные вычисления, когда это возможно.У Pandas уже есть функция mean() для того же самого.
Если индекс этого столбца - «Цена», то вы можете просто сделать следующее -
df['Price'].mean()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...