2016-10-19 108 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