Добавление значений к сумме столбца на основе другого столбца в csv с помощью Pandas Python

#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. рад, что это помогло.