簡體   English   中英

pandas聚合具有多個輸出列的函數

[英]pandas aggregate function with multiple output columns

我試圖定義一個具有多個OUTPUT列的聚合函數,我想使用如下

df.groupby(by=...).agg(my_aggregation_function_with_multiple_columns)

任何想法怎么做?

我嘗試過類似的東西

def my_aggregation_function_with_multiple_columns(slice_values):
    return {'col_1': -1,'col_2': 1}

但這會在單個列中邏輯輸出字典{'col_1': - 1,'col_2':1} ...

這是不可能的,因為agg處理所有列 - 首先處理第一列,然后處理第二列....到最后。

解決方案是flexible apply和返回多輸出添加Series如果輸出更多的標量。

def my_aggregation_function_with_multiple_columns(slice_values):
    return pd.Series([-1, 1], index=['col_1','col_2'])

df.groupby(by=...).apply(my_aggregation_function_with_multiple_columns)

樣品:

df = pd.DataFrame(dict(A=[1,1,2,2,3], B=[4,5,6,7,2], C=[1,2,4,6,9]))
print (df)

def my_aggregation_function_with_multiple_columns(slice_values):
    #print each group
    #print (slice_values)
    a = slice_values['B'] + slice_values['C'].shift()
    print (type(a))
    return a

<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>
<class 'pandas.core.series.Series'>

df = df.groupby('A').apply(my_aggregation_function_with_multiple_columns)
print (df)
A   
1  0     NaN
   1     6.0
2  2     NaN
   3    11.0
3  4     NaN
dtype: float64

這個問題可以用多種方式解釋。 以下提供了計算多個輸出列的解決方案,可以為每列使用不同的功能。

該示例使用與上述答案相同的Pandas DataFrame df:

import pandas as pd
df = pd.DataFrame(dict(A=[1,1,2,2,3], B=[4,5,6,7,2], C=[1,2,4,6,9]))

作為A中的組的函數,計算B中的值的總和並將其放入一列中,並且計算B中的值(計數)的數量並將其放入另一列中。

df.groupby(['A'], as_index=False).agg({'B': {'B1':sum, 'B2': "count"}})

由於在將來的版本中將棄用具有重命名的字典,因此以下代碼可能更好:

df.groupby(['A'], as_index=False).agg({'B': {sum, "count"}})

下一個示例顯示了如果要在不同的列上進行不同的計算,計算B的總和和C的平均值,如何執行此操作:

df.groupby(['A'], as_index=False).agg({'B': sum, 'C': "mean"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM