#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