выполнить интеграцию со столбцами Pandas DataFrame - PullRequest
1 голос
/ 29 октября 2019

Я хочу выполнить интеграцию со столбцами панд данных. Первый столбец - это Age (time - dt), а остальные столбцы нужно интегрировать по времени.

Я попытался использовать подход 'apply' / 'lambda', используя функцию интегрирования scipy. Но не может этого сделать.

import pandas as pd
from scipy import integrate

sfr = 
      Age_Gyr          3254          3269          3291
0    0.500000  5.182340e-08  2.642610e-07  2.783430e-09
1    0.560322  4.084170e-08  1.515610e-07  2.627680e-09
2    0.627922  2.986970e-08  2.819660e-08  2.410660e-09
3    0.703678  2.386120e-08  2.097600e-09  2.555090e-09
4    0.788572  1.793270e-08  5.751970e-11  5.490520e-09
5    0.883709  1.373250e-08  1.517070e-10  6.231230e-09
6    0.990324  1.028010e-10  5.139110e-09  7.419210e-09
7    1.109800  7.512700e-10  4.182470e-08  1.440080e-08
8    1.243690  1.719770e-09  2.239910e-10  4.866400e-08
9    1.393740  2.806130e-08  5.869810e-10  6.121040e-08
10   1.561880  3.359250e-08  1.530720e-08  1.116400e-07
11   1.750320  8.492680e-08  3.197630e-09  1.711650e-07
12   1.961480  1.090190e-07  2.578610e-09  2.090300e-07
13   2.198130  1.490990e-07  1.561680e-10  3.531300e-07
14   2.463320  2.050680e-07  6.861820e-10  3.742560e-07
15   2.760500  2.683970e-07  5.512860e-09  4.297430e-07
16   3.093540  3.093700e-07  1.798130e-08  3.771080e-07
17   3.466760  4.114820e-07  1.491870e-08  4.958250e-07
18   3.885010  4.540180e-07  1.275250e-08  5.664370e-07
19   4.353710  6.332550e-07  9.337140e-08  5.912740e-07
20   4.878970  6.151890e-07  9.788760e-08  5.900450e-07
21   5.467590  7.640760e-07  2.338090e-07  6.881540e-07
22   6.127220  7.573870e-07  3.309460e-07  8.128530e-07
23   6.866440  1.203460e-06  2.738100e-07  1.532900e-06
24   7.694840  1.613990e-06  2.767600e-07  8.485710e-07
25   8.623180  2.058680e-06  4.189610e-07  9.596390e-07
26   9.663520  2.620590e-06  9.887390e-07  2.471610e-06
27  10.829400  3.309770e-06  1.226540e-06  2.801140e-06
28  12.135900  3.977210e-06  5.305930e-06  3.492020e-06
29  13.600000  5.327290e-06  1.012560e-05  4.556700e-06

integral = np.array([])
for col in sfr.columns[1:]:
    temp = sfr[sfr.columns[1:]].apply(lambda x: integrate.trapz(x[col],x['Age_Gyr']))
    integral = np.append(integral,temp)

print(integral)

KeyError: ('3254', 'произошло с индексом Age_Gyr')

1 Ответ

0 голосов
/ 29 октября 2019

Используйте DataFrame.iloc для выбора всех столбцов без последнего с DataFrame.apply:

s = sfr.iloc[:, 1:].apply(lambda x: integrate.trapz(x,sfr['Age_Gyr']))
print (s)
3254    0.000023
3269    0.000019
3291    0.000020
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...