首页 > 解决方案 > 是否可以在 Pandas 的 groupby 操作中应用`first()`和`last()`来分隔列?

问题描述

我有一个数据框:

df = pd.DataFrame({'id': [1, 1, 2, 2], 'data': [1, 2, 3, 4], 'value': [10, 9, 8, 7]})

In [4]: df
Out[4]: 
   id  data  value
0   1     1     10
1   1     2      9
2   2     3      8
3   2     4      7

In [5]: df.groupby(['id']).last()
Out[5]: 
    data  value
id             
1      2      9
2      4      7

In [6]: df.groupby(['id']).first()
Out[6]: 
    data  value
id             
1      1     10
2      3      8

是否可以从groupbyfirst()应用于valuelast()应用于组成的数据框生成数据框data?如果它更容易,您可以假设last()它适用于除 之外的所有内容value,并且first()仅适用于value. 我可以在两个单独的 groupbys 中完成,但可以在一个中完成吗?

标签: pythonpandaspandas-groupby

解决方案


您可以将 funcs 的字典传递给agg

In[80]:
df.groupby('id').agg({'data':'last', 'value':['first','last']})
Out[80]: 
   data value     
   last first last
id                
1     2    10    9
2     4     8    7

如果要调用firstlast可以在“值”列上传递函数列表。这里pandas可以通过仅传递函数的字符串名称来推断要调用的方法


推荐阅读