#python #pandas
#python #pandas
Вопрос:
Допустим, у меня есть этот фрейм данных:
Fruits Price Quantity
apple 12 10
pear 50 5
kiwi 42 20
kiwi 30 35
Я хочу сделать сумму, подобную этой группировке по фруктам:
df.groupby(['Fruits'])['Price'].sum()
До сих пор все было хорошо, но я хочу, чтобы цена добавлялась к сумме, разделенной пополам (цена / 2) для столбцов, где количество превышает 10. Как мне это сделать?
Комментарии:
1. Вы пробовали что-нибудь, что не работает? пожалуйста, поделитесь ошибкой, с которой вы столкнулись.
2. я не сталкиваюсь с какой-либо ошибкой, я искал в Интернете решения, но не нашел ни одного, я просто хочу, чтобы для строк, где количество превышает 10, цена добавлялась к сумме вдвое
3. Вам нужно, чтобы отдельная цена была уменьшена вдвое или сумма сгруппированной цены?
4. Мне нужна такая сумма, как df.groupby([‘Fruits’])[‘Price’].sum() , но там, где количество превышает 10, соответствующая добавляемая цена уменьшается вдвое. Пример из фрейма данных, указанного выше: 12 50 (42/2) (30/2)
Ответ №1:
Вы можете попробовать сначала внести изменения в фрейм данных, а затем вычислить сумму после группировки.
df_clone = df.copy()
df_clone['Price'] = [df_clone['Price'].loc[i]/2 if df_clone['Quantity'].loc[i]<10 else df_clone['Price'].loc[i] for i in range(df_clone.shape[0])]
print(df_clone)
что даст:
Fruits Price Quantity
0 apple 12.0 10
1 pear 50.0 5
2 kiwi 21.0 20
3 kiwi 15.0 35
и теперь вы можете сгруппировать этот новый фрейм данных, чтобы получить свой результат:
df_clone.groupby(['Fruits'])['Price'].sum()
что приводит к:
Fruits
apple 12.0
kiwi 36.0
pear 50.0
Name: Price, dtype: float64
Комментарии:
1. Это кажется правильным, большое спасибо за ваш ответ!
2. рад, что это помогло.