2016-10-19 184 views
1

我有一個包含「功能」的股市大熊貓DF,它看起來像這樣聚集:熊貓DF與價值觀字典作爲Python列表從DF列

features for stocks previous to training neural net

我現在正在試圖建立一個字典,獨特扇區關鍵,以及獨特部門行情的Python列表,所以我最終的東西,看起來像這樣:

{'consumer_discretionary': ['AAP', 
    'AMZN', 
    'AN', 
    'AZO', 
    'BBBY', 
    'BBY', 
    'BWA', 
    'KMX', 
    'CCL', 
    'CBS', 
    'CHTR', 
    'CMG', 

我可以遍歷大熊貓DF行創建字典,但我更喜歡一個更Python的解決方案。到目前爲止,這個代碼是一個部分的解決方案:

df.set_index('sector')['ticker'].to_dict() 

任何反饋表示讚賞。

UPDATE:

該解決方案通過@wrwrwr

df.set_index('ticker').groupby('sector').groups 

部分作品,但它返回一個熊貓系列的價值,而不是Python列表。任何有關如何將熊貓系列轉換成同一行中的python列表以及不必迭代字典的想法?

回答

3

不會f.set_index('ticker').groupby('sector').groups是你想要的嗎?

例如:

f = DataFrame({ 
     'ticker': ('t1', 't2', 't3'), 
     'sector': ('sa', 'sb', 'sb'), 
     'name': ('n1', 'n2', 'n3')}) 

groups = f.set_index('ticker').groupby('sector').groups 
# {'sa': Index(['t1']), 'sb': Index(['t2', 't3'])} 

要確保他們有你想要的類型:

{k: list(v) for k, v in f.set_index('ticker').groupby('sector').groups.items()} 

或:

f.set_index('ticker').groupby('sector').apply(lambda g: list(g.index)).to_dict() 
+0

謝謝@wrwrwr,幾乎沒有!你的解決方案非常出色,但它並不完全返回一個python列表作爲值,而是一個熊貓系列作爲值。我可以從這裏取出它並循環字典來將熊貓系列轉換成一個列表,但是,這正是我所避免的。我正在尋找pythonic,一個班輪解決方案。你知道如何將熊貓系列轉換成同一行中的python列表嗎?即:f.set_index('ticker').groupby('sector')。groups.tolist()(不起作用) –

+0

使用'list()'方法轉換爲列表 – MMF

+1

我不確定你爲什麼將價值系列作爲價值觀,但仍然用一些相當殘忍的方法來擴大答案,以強制實施它們。 – wrwrwr