Skip to content

Commit 172101a

Browse files
authored
Merge pull request #279 from fooof-tools/dataf
[ENH] - Add and use `group_to_dict` function
2 parents 4a8754d + 3c4fca1 commit 172101a

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

fooof/data/conversions.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,32 @@ def model_to_dataframe(fit_results, peak_org):
8484
return pd.Series(model_to_dict(fit_results, peak_org))
8585

8686

87+
def group_to_dict(fit_results, peak_org):
88+
"""Convert a group of model fit results into a dictionary.
89+
90+
Parameters
91+
----------
92+
fit_results : list of FOOOFResults
93+
List of FOOOFResults objects.
94+
peak_org : int or Bands
95+
How to organize peaks.
96+
If int, extracts the first n peaks.
97+
If Bands, extracts peaks based on band definitions.
98+
99+
Returns
100+
-------
101+
dict
102+
Model results organized into a dictionary.
103+
"""
104+
105+
fr_dict = {ke : [] for ke in model_to_dict(fit_results[0], peak_org).keys()}
106+
for f_res in fit_results:
107+
for key, val in model_to_dict(f_res, peak_org).items():
108+
fr_dict[key].append(val)
109+
110+
return fr_dict
111+
112+
87113
@check_dependency(pd, 'pandas')
88114
def group_to_dataframe(fit_results, peak_org):
89115
"""Convert a group of model fit results into a dataframe.
@@ -103,4 +129,4 @@ def group_to_dataframe(fit_results, peak_org):
103129
Model results organized into a dataframe.
104130
"""
105131

106-
return pd.DataFrame([model_to_dataframe(f_res, peak_org) for f_res in fit_results])
132+
return pd.DataFrame(group_to_dict(fit_results, peak_org))

fooof/tests/data/test_conversions.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,17 @@ def test_model_to_dataframe(tresults, tbands, skip_if_no_pandas):
4141
out = model_to_dataframe(tresults, peak_org=tbands)
4242
assert isinstance(out, pd.Series)
4343

44+
def test_group_to_dict(tresults, tbands):
45+
46+
fit_results = [deepcopy(tresults), deepcopy(tresults), deepcopy(tresults)]
47+
48+
for peak_org in [1, 2, 3]:
49+
out = group_to_dict(fit_results, peak_org=peak_org)
50+
assert isinstance(out, dict)
51+
52+
out = group_to_dict(fit_results, peak_org=tbands)
53+
assert isinstance(out, dict)
54+
4455
def test_group_to_dataframe(tresults, tbands, skip_if_no_pandas):
4556

4657
fit_results = [deepcopy(tresults), deepcopy(tresults), deepcopy(tresults)]

0 commit comments

Comments
 (0)