分组时获取两列字典的列表

2024-05-03 20:37:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用groupby并通过打印一个字典列表来聚合结果,其中一列作为键,另一列作为值

我的数据如下:

df = pd.DataFrame([
    {'channel': 'one', 'hour': 6, 'rating':7.2},
    {'channel': 'one', 'hour': 7, 'rating':8.2},
    {'channel': 'one', 'hour': 8, 'rating':4.2},
    {'channel': 'two', 'hour': 6, 'rating':10.2},
    {'channel': 'two', 'hour': 7, 'rating':1.2},
    {'channel': 'two', 'hour': 8, 'rating':3.2},
])

我尝试以下方法

df.groupby('channel').agg({'hour':list, 'rating':list}).reset_index()

我可以得到一份物品清单

channel hour    rating
0   one [6, 7, 8]   [7.2, 8.2, 4.2]
1   two [6, 7, 8]   [10.2, 1.2, 3.2]

我的目的是获得以下信息: 频道小时分级(按小时)

0   one {6:7.2, 7:8.2, 8:4.2}
1   two {6:10.2, 7:1.2, 8:3.2}

我尝试以下方法: df.groupby('channel').agg({'rating_by_hour':{df['hour']:df['rating']}}).reset_index()

当然,我会得到一个错误,说明“series”对象是可变的


Tags: 方法df列表index字典channeloneagg
2条回答

还有一个:

df.groupby('channel').apply(lambda x: x.set_index('hour')['rating']
                                       .to_dict()).reset_index()

channel     0
0   one     {6: 7.2, 7: 8.2, 8: 4.2}
1   two     {6: 10.2, 7: 1.2, 8: 3.2}

这里有一个方法

df[['hour','rating']].apply(tuple,1).groupby(df['channel']).apply(list).map(dict).reset_index()
Out[168]: 
  channel                                0
0     one   {8.0: 4.2, 6.0: 7.2, 7.0: 8.2}
1     two  {8.0: 3.2, 6.0: 10.2, 7.0: 1.2}

相关问题 更多 >