Pandas df到字典,其值为从df列聚合的python列表

时间:2016-10-19 21:44:57

标签: python pandas dictionary

我有一只包含'功能的熊猫df。对于股票,看起来像这样:

features for stocks previous to training neural net

我现在正在尝试创建一个字典,其中唯一扇区,并且 python列表为该唯一扇区< strong>值,所以我最终得到的东西看起来像这样:

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

我可以迭代pandas df行来创建字典,但我更喜欢更加pythonic的解决方案。到目前为止,此代码是部分解决方案:

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

感谢任何反馈。

更新

@wrwrwr的解决方案

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

部分有效,但它返回 pandas系列作为值,而不是 python列表。关于如何将pandas系列转换为同一行中的python列表并且不必迭代字典的任何想法?

1 个答案:

答案 0 :(得分:4)

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()