我正在尝试从字典列表中创建数据框。但是,此列表的一个条目本身就是一个数组(或者可能是一个pandas.Series)。我需要进行分组和平均,我无法让它工作。 假设我有
import numpy as np
import pandas as pd
ls=[{'A': 1,'B':4, 'n':.5, 's':.9},{'A': 2,'B':4, 'n':.55, 's':.95},
{'A': 1,'B':5, 'n':.52, 's':.92},{'A': 2,'B':5, 'n':.57, 's':.97}]
df=pd.DataFrame(ls)
我可以通过执行来表示数值n和s的平均值(假设A是我感兴趣的数量,B代表平均值的变量,如种子)
g=df.groupby('A')
g['n'].mean()
但是,如果我的字典由
提供ls2=[{'A': 1,'B':4, 'n':np.random.random(3), 's':np.random.random(3)},
{'A': 2,'B':4, 'n':np.random.random(3), 's':np.random.random(3)},
{'A': 1,'B':5, 'n':np.random.random(3), 's':np.random.random(3)},
{'A': 2,'B':5, 'n':np.random.random(3), 's':np.random.random(3)}]
df2=pd.DataFrame(ls2)
上述方法不起作用。这里n和s将例如给出三个不同的时间点(这些是测量的数量)。我想创建一个数据框,以便我可以编写类似
的内容g2=df2.groupby('A')
g['n'][1].mean()
得到n的第二个分量的平均值,分成变量A的不同值。我也考虑使用pd.panel,但这似乎也不合适。
答案 0 :(得分:0)
我认为你走在正确的轨道上,但你没有正确构建数据帧。注意Dataframe
如何在第24行和第25行构建:
In [24]:
df3=map(pd.DataFrame, ls2)
In [25]:
print df3
[ A B n s
0 1 4 0.029207 0.232231
1 1 4 0.190384 0.173439
2 1 4 0.911990 0.190540
[3 rows x 4 columns], A B n s
0 2 4 0.197783 0.607027
1 2 4 0.294718 0.899167
2 2 4 0.503692 0.887258
[3 rows x 4 columns], A B n s
0 1 5 0.536258 0.406545
1 1 5 0.351419 0.197343
2 1 5 0.572489 0.436308
[3 rows x 4 columns], A B n s
0 2 5 0.607138 0.535803
1 2 5 0.086167 0.336044
2 2 5 0.650546 0.886143
[3 rows x 4 columns]]
In [26]:
df3=df3[0].append(df3[1:])
In [27]:
print df3.groupby('A').mean()
B n s
A
1 4.5 0.431958 0.272734
2 4.5 0.390007 0.691907
[2 rows x 3 columns]