2017-06-06 33 views
0

我需要建立從數據框(「分組」)建成的組中選定值的字典。 idcolumn是一個字符串列表[「column_name」](我把它作爲一個列表,因爲在某些時候,我需要爲使用標籤的操作添加各種其他字符串/列名稱)。奇怪groupby /數據幀行爲與列表()

所以用作平均來檢索組這樣的說法:

grouped.get_group(k).loc[:,idcolumn] 

其中相同作品完美到

grouped.get_group(k).loc[:,idcolumn[0]] 

輸出所選擇的數據的數據幀以[「欄」]作爲頭。

我的完整表述是:

dict_to_build= {k: list(grouped.get_group(k).loc[:,idcolumn]) for k in grouped.groups.keys() } 

,但我有一個非常奇怪的錯誤。
構建的字典包含所有鍵但是作爲唯一值「column_name」。 雖然如果我使用

dict_to_build= {k: list(grouped.get_group(k).loc[:,idcolumn[0]) for k in grouped.groups.keys() } 

的字典是完全確定。

係爲例這樣的:

In [115]: pde=pd.DataFrame({"a":[1,2,3,1,2,3], "column_name":["a","b","c","d","e","f"]}) 

In [116]: pde 
Out[116]: 
    a column_name 
0 1   a 
1 2   b 
2 3   c 
3 1   d 
4 2   e 
5 3   f 

In [117]: grouped=pde.groupby[1] 
Traceback (most recent call last): 

    File "<ipython-input-117-b504dadfee12>", line 1, in <module> 
    grouped=pde.groupby[1] 

TypeError: 'method' object is not subscriptable 


In [118]: grouped=pde.groupby("a") 

In [119]: grouped.get_group(1).loc[:,"column_name"] 
Out[119]: 
0 a 
3 d 
Name: column_name, dtype: object 

In [120]: list(grouped.get_group(1).loc[:,"column_name"]) 
Out[120]: ['a', 'd'] 

In [121]: list(grouped.get_group(1).loc[:,["column_name"]]) 
Out[121]: ['column_name'] 

有人能賜教大約發生了什麼?這對我來說很奇怪。問題來自數據框,帶有list作爲參數的loc,還是列表函數?

回答

1

我想原因是

grouped.get_group(1).loc[:,"column_name"] 

返回一個系列,而

grouped.get_group(1).loc[:,["column_name"]] 

返回一個數據幀。

當您執行列表(系列)時,它將返回Series的值,而當您執行列表(Dataframe)時,它將返回df的列,在本例中爲'column_name'。

+0

非常有意義;)非常感謝! –

+1

不客氣! – Allen