#python #pandas
Вопрос:
У меня есть следующий фрейм данных:
id item item_cost order_total 1 A 6 10 1 B 4 NaN 2 A 5 5 3 C 12 12
Существуют дубликаты ключей (столбец «идентификатор»), которые относятся к определенному заказу. order_total-это сумма каждого item_cost с одинаковым идентификатором. Теперь я хотел бы скопировать order_total в каждую строку одного и того же порядка. Например, обе строки с идентификатором = 1 должны иметь order_total 10. У одного из них есть Нэн.
Этот фрейм данных просто считывается из csv, поэтому я не производил никаких вычислений ни по одному из этих столбцов.
Упрощенная логика, которую я пытаюсь достичь, такова: если идентификатор столбца является дубликатом, заполните значения NaN значением, отличным от NaN, из строки с тем же идентификатором.
Я попробовал следующий код:
print(df.groupby('id',as_index=False).sum())
Однако проблема здесь в том, что я теряю имя элемента, которое мне нужно использовать для дальнейшего анализа.
Комментарии:
1. печать(df.groupby(‘id’) [«order_total»].сумма()
2. @FaikaMajid — спасибо, однако это больше не позволяет мне видеть, какие товары являются частью заказа. Он выводит общую стоимость каждого заказа с одинаковым идентификатором, однако я не вижу, какие товары были частью этого заказа. Надеюсь, в этом есть смысл.
3. если фрейм данных мал, вы можете использовать для этого итерации. В этом первом используйте исходный фрейм данных и выполните запрос к этому фрейму данных, где order_total равен nan,. Затем повторите оба и проверьте, совпадает ли идентификатор, поместите значение порядка во 2-й порядок кадров данных
Ответ №1:
Попробуй это:
df['order_total'] = df.groupby('id').order_total.transform('first') print(df) id item item_cost order_total 0 1 A 6 10.0 1 1 B 4 10.0 2 2 A 5 5.0 3 3 C 12 12.0
Комментарии:
1. отлично, спасибо, это сработало именно так, как ожидалось! Я никогда не видел функцию .transform, поэтому почитаю о ней, чтобы понять, что она делает.
2. Рад, что это сработало! Возможно, я отредактировал ответ, пока вы его пробовали. Я сделал несколько ненужных операций перед редактированием.