我需要将描述列添加到通过对来自其他数据帧的项目进行分组而构建的数据框。
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是非常错误的,但希望你能得到这个想法,希望有一些大熊猫的东西可以更有效地完成这个伎俩但却无法找到它
有什么想法吗?
答案 0 :(得分:1)
对于dict
total
列以及sum
DataFrameGroupBy.agg
,我认为您需要description
个df = 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