#python #pandas #dataframe #pandas-groupby
Вопрос:
Мне нужно объединить все строки с одним и тем же индексом в одном фрейме данных. У меня есть решение в переполнении стека, но я столкнулся с некоторыми проблемами:
import pandas as pd
import numpy as np
three = {'name':['ming', 'viper', 'rookie'], 'year':[1997, 1998, np.nan]}
one = {'name':['rookie'], 'year':[1995]}
df3 = pd.DataFrame(three, index=['rng', 'edg', 'ig'])
df2 = pd.DataFrame(one, index=['ig'])
df_concat = pd.concat([df2, df3])
print(df_concat)
df_concat-это:
Я использую метод grouby() таким образом:
df_g = df_concat.groupby(level=0, sort=False).sum()
print(df_g)
Однако результат оказался не таким, как я ожидал:
Почему столбец «имя» потерян?
Ответ №1:
Попробуйте через agg()
:
df_g=df_concat.groupby(level=0, sort=False).agg({'name':'first','year':'sum'})
выход из df_g
:
name year
ig rookie 1995.0
rng ming 1997.0
edg viper 1998.0
Примечание: В этом коде df_concat.groupby(level=0, sort=False).sum()
, поскольку значения в столбце name не являются числовыми, это не включает значения столбца name и выполняется sum()
в зависимости от года