Pandas Groupby:如何获取第一个字符串

Hou*_*und 1 python pandas

我有这个数据框:

dfexample = pd.DataFrame({'OID' : [7, 7, 7, 7],
                      'Category' : ['Plumbing', 'Plumbing', 'Plumbing', 'Plumbing'],
                      'Product_Type' : ['Accessory', 'Shower Accessories', 'Showers', 'Showers'],
                      'Extended_Price' : [20.5, 12.12, 122.45, 225.98]})
Run Code Online (Sandbox Code Playgroud)

我想按“ OID”对数据框进行分组,并获取对象列(CategoryProduct_Type)的“第一个”字符串,因此在这种情况下为'plumbing''accessory'。所需输出:

[in]:dfgrouped

[out]:
OID       Category         Extended_Price     Product_Type
7         Plumbing         381.05             Accessory  
Run Code Online (Sandbox Code Playgroud)

现在,我将所有字符串连接在一起,并且不返回“第一个”字符串。

def f(x):
return pd.Series(dict(Category = x['Category'].sum(),
                     Extended_Price = x['Extended_Price'].sum(),
                      Product_Type = x['Product_Type'].sum() 
                     ))
dfexample.groupby('OID').apply(f)
Run Code Online (Sandbox Code Playgroud)

Ian*_*anS 5

firstGROUPBY方法返回各组的第一个元素:

dfexample.groupby('OID').first()
Run Code Online (Sandbox Code Playgroud)

显然,您还希望对数字列求和,因此需要agg用于指定要用于每个列的聚合:

dfexample.groupby('OID').agg({
    'Category': 'first',
    'Product_Type': 'first',
    'Extended_Price': 'sum'
})
Run Code Online (Sandbox Code Playgroud)