2014-04-18 34 views
0

我試圖從字典列表中創建一個數據框。然而,這個列表中的一個條目本身就是一個數組(或者可能是一個熊貓系列)。我需要進行分組和平均,但我無法完成它的工作。 假設我不得不從字典列表中創建一個python熊貓數據框時,每個字典本身的一個條目本身是一個數組

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​​是如何在第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] 
+0

不幸的是,這並不完全回答我的問題(道歉不夠清楚)。現在,對'n'的所有條目進行平均,例如A = 1。 (對於A = 1,我得到平均值=(.029 + .190 + .912 + .536 + .351 + .572)/6=.431)。但是,我想能夠訪問n的第二個條目的含義。所以我想計算A = 1時的平均值=(.19 + .35)/2=0.27。 –

+0

哦,我(親切的)見。在這種情況下,您希望A = 1有3個值,對嗎? 'df3.groupby(['A',df3.index])。mean()'。你的意思是這樣的結果嗎?只要每個'np.array'具有相同的長度,就可以工作。 –

+0

我也想通過'df3 ['time'] = df3.index'和'g = df3.groupby(['A','time'])['n']'和'g' .mean()'也適用。所以是的,這回答了我的問題。謝謝! –

相關問題