#python #python-3.x #pandas #dataframe
#python #python-3.x #панды #фрейм данных
Вопрос:
У меня есть фрейм данных с товарами, продаваемыми в разных магазинах каждый день:
date date_block_num shop_id item_id item_price item_cnt_day day month_year
1953691 24.09.2014 20 5 1039 899.0 1.0 24 09.2014
1953692 27.09.2014 20 5 1015 449.0 1.0 27 09.2014
1953693 07.09.2014 20 5 1329 399.0 1.0 07 09.2014
1953694 27.09.2014 20 5 984 399.0 1.0 27 09.2014
1953695 08.09.2014 20 5 984 399.0 1.0 08 09.2014
Я хотел бы получить результаты для каждого хранилища. Итак, я попытался:
revenues = {}
for row in transactions_december_2014.sort('shop_id').iterrows():
if last_shop_id == row.shop_id:
revenues[shop_id] = row.item_price * row.item_cnt_day
last_shop_id = row.shop_id
else:
revenues[shop_id] = row.item_price * row.item_cnt_day
print(max(revenues))
Но это возвращает меня:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-391a52cd0210> in <module>()
9 # transactions_december_2014.groupby("shop_id").sum(transactions_december_2014.item_price * transactions_december_2014.item_cnt_day)
10 revenues = {}
---> 11 for row in transactions_december_2014.sort('shop_id').iterrows():
12 if last_shop_id == row.shop_id:
13 revenues[shop_id] = row.item_price * row.item_cnt_day
/opt/conda/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
3079 if name in self._info_axis:
3080 return self[name]
-> 3081 return object.__getattribute__(self, name)
3082
3083 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'sort'
Я также планировал использовать groupby
s:
transactions_december_2014.groupby("shop_id").sum(transactions_december_2014.item_price * transactions_december_2014.item_cnt_day)
Но это никогда не работает. Сейчас я подумываю о том, чтобы сделать это сейчас с lambda
помощью as, который я использую для циклов.
Ответ №1:
Как я понимаю, вы хотите вычислить общую стоимость товаров, проданных определенным магазином. Вы можете сделать это так:
df["cost"] = df["item_price"] * df["item_cnt_day"]
df.groupby("shop_id")["cost"].sum()
Сначала вы создаете столбец, в котором сохраняется общая стоимость проданных товаров (цена * сколько продано). Затем вы группируете на основе хранилища, чтобы, наконец, получить сумму затрат.