我有一只包含'功能的熊猫df。对于股票,看起来像这样:
我现在正在尝试创建一个字典,其中唯一扇区为键,并且 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列表并且不必迭代字典的任何想法?
答案 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()