Python:为每个组提供一个单一的值

时间:2018-02-09 17:10:49

标签: python pandas

我需要将描述列添加到通过对来自其他数据帧的项目进行分组而构建的数据框。

grouped= df1.groupby('item')
list= grouped['total'].agg(np.sum)
list= list.reset_index()

为我已经提出此解决方案的每个项目分配一个描述标签:

def des(item):
        return df1['description'].loc[df1['item']== item].iloc[0]

list['description'] = list['item'].apply(des)

它有效,但执行需要花费大量时间。 我想做那样的事情

list=list.assign(description= df1['description'].loc[df1['item']==list['item']]

list=list.assign(description= df1['description'].loc[df1['item'].isin(list['item'])]
Theese是非常错误的,但希望你能得到这个想法,希望有一些大熊猫的东西可以更有效地完成这个伎俩但却无法找到它 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对于dict total列以及sum DataFrameGroupBy.agg,我认为您需要descriptiondf = df1.groupby('item', as_index=False).agg({'total':'sum', 'description':'first'}) 个函数:

list

也不要使用变量名list,因为df1 = pd.DataFrame({'description':list('abcdef'), 'B':[4,5,4,5,5,4], 'total':[5,3,6,9,2,4], 'item':list('aaabbb')}) print (df1) B description item total 0 4 a a 5 1 5 b a 3 2 4 c a 6 3 5 d b 9 4 5 e b 2 5 4 f b 4 df = df1.groupby('item', as_index=False).agg({'total':'sum', 'description':'first'}) print (df) item total description 0 a 14 a 1 b 15 d 是python代码保留字。

<强>示例

~/.bashrc