熊猫集团生产系列;不是groupby对象

时间:2018-07-22 09:42:38

标签: python pandas dataframe pandas-groupby

我有一个交易的Pandas DataFrame:

transactions.head():

   Amount      Date of Transaction   Description  \
0   39.95      2017-03-30            Fake_Transaction_One   
1    2.39      2017-04-01            Fake_Transaction_Two      
2    8.03      2017-04-01            Fake_Transaction_Three      
3   34.31      2017-04-01            Fake_Transaction_Four    
4   10.56      2017-04-03            Fake_Transaction_Five     

       Purchase_Type        year_month  
0      Miscellaneous        2017-03  
1      tool_expense         2017-04  
2      food_and_domestic    2017-04  
3      food_and_domestic    2017-04  
4      food_and_domestic    2017-04  

我在此DataFrame上运行groupby命令:

grouped_transactions = transactions.groupby(['Purchase_Type','year_month'])['Amount'].sum()

哪个会生成一个groupby对象:

Purchase_Type        year_month
tool_expense         2017-04       72.49
Calendar_Event       2017-08        3.94
                     2017-12       23.92
                     2018-02       42.91
                     2018-03       10.91

我想在此上运行groupby命令,例如

grouped_transactions.groups.keys()

但是我不能,因为该对象不是groupby对象,而是一个Series:

In: type(grouped_transactions)
Out: pandas.core.series.Series

查看grouped_transactions似乎是一个groupby对象,而不是Series。进一步创建它,但是在Pandas DataFrame上运行.groupby方法。因此,我不确定为什么它是系列。

我的理解或方法上有什么错误?

3 个答案:

答案 0 :(得分:3)

预期的行为(如果方法像-1.0与聚合函数链接在一起)会得到groupbySeries

如果您需要DataFrame对象:

groupby

但是如果您需要将通过聚合创建的g = transactions.groupby(['Purchase_Type','year_month']) print (g) <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x00000000191EA5C0> 转换为列:

MultiIndex

或者:

df = transactions.groupby(['Purchase_Type','year_month'], as_index=False)['Amount'].sum()

答案 1 :(得分:2)

索引groupby对象或对其调用聚合方法会将其转换为seriesdataframe类型的对象。最佳做法:如果既需要键又需要聚合,则将GroupBy对象分配给变量,然后对该对象执行多项操作。

下面是一些示例。

df = pd.DataFrame([['A', 'B', 1], ['A', 'B', 2], ['A', 'C', 3]])

g = df.groupby([0, 1])
# <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x0000000007E76AC8>

keys = g.groups.keys()
# dict_keys([('A', 'B'), ('A', 'C')])

sums_df = g.sum()
# <class 'pandas.core.frame.DataFrame'>

sums_series_group = g[2]
# <class 'pandas.core.groupby.groupby.SeriesGroupBy'>

sums_series = g[2].sum()
# <class 'pandas.core.series.Series'>

答案 2 :(得分:0)

使用此:

grouped_transactions = transactions.groupby(['Purchase_Type','year_month'])[['Amount']].sum()

如果使用双括号,将创建一个列表,并将其作为参数传递给DataFrame索引函数。