Сведите два кадра данных в один и суммируйте суммы

#python #pandas #dataframe

Вопрос:

У меня есть два кадра данных df1 и df2

 df1 = pd.DataFrame({'name': ['A', 'B', 'C'],
            'value': [100, 300, 150]})
df2 = pd.DataFrame({'name': ['A', 'B', 'D'],
            'value': [20, 50, 7]})
 

Я хочу объединить эти два кадра данных в новый кадр данных df3, чтобы получить следующий результат:

введите описание изображения здесь

Затем я хочу создать четвертый новый фрейм данных df4, в котором строки агрегируются в суммы, такие как

 df4 = pd.DataFrame({'name': ['A', 'B', 'C',  'D'],
            'value': [120, 350, 150, 7]})
 

Как это сделать?

Ответ №1:

Вы можете объединить фреймы данных вместе, а затем использовать groupby и sum:

 df3 = pd.concat([df1, df2])
df4 = df3.groupby('name').sum().reset_index()
 

Результат df4 :

   name  value
0    A    120
1    B    350
2    C    150
3    D      7
 

Комментарии:

1. Тай, почему reset_index()?

2. Сброс индекса гарантирует, что name это снова столбец. Если вы не сбросите индекс, он name останется индексом

3. В качестве альтернативы as_index=False может быть передан groupby , чтобы не name стать индексом. df4 = df3.groupby('name', as_index=False).sum()

4. @ДерекО Тай, отличная помощь для такого новичка, как я.

5. @ДерекО Тай, есть ли команда, чтобы снова проверить, является ли имя столбцом? Было бы это что-то вроде df4.info() ?

Ответ №2:

Другой способ-просто добавить

 df1.append(df2, ignore_index=True).groupby('name')['value'].sum().to_frame()



       value
name       
A       120
B       350
C       150
D         7