pandas - генерирайте рамка от данни, съставена от обобщения на подмножества на рамка от данни

Имам рамка от данни df на pandas с форма (100, 10) (100 реда, 10 колони) и искам да генерирам рамка от данни df_summary от df, която:

  • е с форма (1, 4) с имена на колони ['col1', 'col2', 'col3', 'col4']
  • първият ред съдържа means от 1-я колона на df, 2-4-та колона (средната стойност на всички редове в тези 3 колони), 5-8-ма колона и 9-10-та колона
  • вторият ред съдържа variances от 1-ва колона на df, 2-4-та колона, 5-8-ма колона и 9-10-та колона

Направих проучването си и все още не знам как да направя това ефективно. Всяка помощ ще бъде оценена.


person Teddy C    schedule 04.12.2020    source източник


Отговори (1)


Ето 2 решения, първо с определени диапазони в списъка, преоформяне от stack и обобщение от Series.agg с пропуск към concat:

np.random.seed(2020)
df = pd.DataFrame(np.random.randint(10, size=(100, 10)))

L = [[0], range(2, 4), range(5, 8), range(8, 10)]
cols = ['col1', 'col2', 'col3', 'col4']

out = pd.concat([df[x].stack().agg(['mean','var']) for x in L], axis=1, keys=cols)
print (out)
          col1      col2      col3      col4
mean  4.120000  4.270000  4.580000  4.405000
var   8.793535  8.298593  7.963478  9.418065

Или за диапазони се използва cut, unpivot от DataFrame.melt и след това обобщете mean с var:

cols = ['col1', 'col2', 'col3', 'col4']

df.columns = pd.cut(df.columns, [0,1,5,8,11], labels=cols, include_lowest=True, right=False)

df = df.melt().groupby('variable')['value'].agg(['mean','var']).T
print (df)
variable      col1      col2      col3      col4
mean      4.120000  4.482500  4.580000  4.405000
var       8.793535  8.611222  7.963478  9.418065
person jezrael    schedule 04.12.2020