Python:有效地为每个组提取单个值

标签 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'])]

这些是非常错误的,但希望你能明白,希望有一些 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/

相关文章:

python - 如何在linux终端直接执行*.pyc文件

python - 无法让程序正确运行Python/Qt/PyQt

python - 日期时间列表的平均时间

python - 将 pandas 列表列转换为矩阵表示(一次热编码)

python - 使用多索引数据框时如何在 seaborn 热图中自定义 y 标签?

Python在JSON结构中获取 sibling

python - 中止 python 交互式控制台的评估

python - Pandas - 在过滤后的数据帧上应用聚合

python - 结合 pandas 和 shutil 时与解码相关的错误

python - 根据两列一起过滤行