从pandas groupby返回聚合数据帧

我正试着用各种方法来控制我的头脑。我想写一个函数,它执行一些聚合函数,然后返回一个数据帧。下面是一个使用sum()的简化示例。我知道有更简单的求和方法,在现实生活中,我的函数更复杂:

将熊猫作为pd导入
df=pd.DataFrame({'col1':['A','A','B','B'],'col2':[1.0,2,3,4]})
In[3]:df
Output[3]:
col1 col2
0 A 1
1 A 2
2 B 3
3 B 4
def func2(df):
dfout=pd.DataFrame({'col1':df['col1'].unique(),
“someData”:总和(df['col2']))
返回数据输出
t=df.groupby('col1')。应用(func2)
In[6]:t
Output[6]:
col1 someData
可乐
A 0 A 3
B 0 B 7

我没想到会有两次col1,也没想到会有那个看起来像神秘索引的东西。我真的以为我会得到col1&amp某些数据

在我的实际应用程序中,我通过多个列进行分组,并且非常希望返回一个数据帧而不是一个序列对象。
在我上面的例子中,有没有关于熊猫正在做什么的解决方案或解释

—-添加信息—

我应该从这个例子开始,我认为:

[13]on

:将熊猫作为pd导入
At[14]on,df=pd.DataFrame({'col1':['A','A','A','B','B','B'],'col2':['C','D','D','D','C','C'],'col3':[1,2,4,6,8,1]})
In[15]:df
Output[15]:
col1 col2 col3
0 A C 0.1
1 A D 0.2
2 A D 0.4
3 B D 0.6
4 B C 0.8
5b1.0
At[16]:def func3(df)中:
..:dfout=总和(df['col3']**2)
..:返回dfout
....: 
At[17]on:t=df.groupby(['col1','col2']).apply(func3)
In[18]:t
Output[18]:
col1 col2
A C 0.01
D 0.20
B C 1.64
D 0.36

在上图中,apply()函数的结果是一个系列。它缺少df.groupby中的groupby列。我正在努力解决的问题的本质是,如何创建一个应用于groupby的函数,该函数将返回函数的结果和对其进行分组的列

—-又一次更新—

似乎如果我这样做:

pd.DataFrame(t).reset_index()

我得到了一个数据帧,它非常接近我想要的

看到带0的列的原因是.unique()的输出是一个数组

了解你的申请如何运作的最好方法是按行动小组进行检查:

[11]on

:g=df.groupby('col1'))
[12]on:g.get_群('A')
Output[12]:
col1 col2
0 A 1
1 A 2
At[13]on:g.get_群('A')['col1'].unique()
Out[13]:数组([A],dtype=object)
At[14]on:sum(g.get_群('A')['col2']))
Out[14]:3.0

大多数情况下,您希望此值是聚合的

grouped.apply的输出总是将组标签作为索引(“col1”的唯一值),因此您的col1示例构造对我来说似乎有点迟钝

注意:要将'col1'(索引)弹出回一列,您可以调用reset\u index,因此在这种情况下

[15]on

:g.sum().reset_index()
Output[15]:
col1 col2
0 A 3
1 B 7

发表评论