我需要向通过对另一个数据帧中的项目进行分组而构建的数据帧添加描述列。
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'])]
这些是非常错误的,但希望你能明白,希望有一些 pandas 的东西可以更有效地完成这个任务,但找不到它 有什么想法吗?
最佳答案
我认为你需要DataFrameGroupBy.agg
通过函数的 dict
- 对于列 total
sum
和对于 description
first
:
df = df1.groupby('item', as_index=False).agg({'total':'sum', 'description':'first'})
也不要使用变量名list
,因为list
是Python代码保留字。
示例:
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:有效地为每个组提取单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48710852/