熊猫DataFrame groupby列来决定

时间:2018-09-06 03:25:36

标签: python pandas dataframe

我的名为df的数据框看起来像

Dig CUI importance 2240 a123 0.28912 2240 b123 0.39021 2230 x133 0.12923 3330 cak2 0.12903 3330 xa45 0.21093 3330 2429 0.21893

对于上面的数据框,我正在通过以下代码运行它,

df = (df.groupby('dig').apply(lambda x: dict(zip(x['cui'],x['importance']))).to_dict())

我得到的输出为

{2240:{a123:0.28912, b123:0.39021},2230:{x133:0.12923},3330:{cak2: 0.12903, xa45:0.21093, 2429:0.21893}}

但是我的输出字典中需要列。我需要建议

输出应该像

{2240:[{cui:a123, importance:0.28912},{cui:b123, importance:0.39021}],2230:[{cui:x133, importance:0.12923},3330:[{cui:cak2, importance:0.12903},{cui:xa45, importance:0.21093},{cui:2429, importance:0.21893}]]}

建议我这样做。

1 个答案:

答案 0 :(得分:0)

一种方法是像您一样对Dig进行分组,但在应用内部调用to_dict('records')

In [103]: df.groupby("Dig").apply(lambda x: x.drop("Dig", 1).to_dict('records')).to_dict()
Out[103]: 
{2230: [{'CUI': 'x133', 'importance': 0.12922999999999998}],
 2240: [{'CUI': 'a123', 'importance': 0.28912},
  {'CUI': 'b123', 'importance': 0.39021}],
 3330: [{'CUI': 'cak2', 'importance': 0.12903},
  {'CUI': 'xa45', 'importance': 0.21093},
  {'CUI': '2429', 'importance': 0.21893}]}