如何在一列上执行pandas groupby操作,但将另一列保留在结果数据框中

Ger:

我的问题是对熊猫进行分组操作。我有以下DataFrame:

In [4]: df = pd.DataFrame({"A": range(4), "B": ["PO", "PO", "PA", "PA"], "C": ["Est", "Est", "West", "West"]})

In [5]: df
Out[5]: 
   A   B     C
0  0  PO   Est
1  1  PO   Est
2  2  PA  West
3  3  PA  West

这就是我想做的事情:我想按B列分组,并对A列进行求和。但是最后,我希望C列仍在DataFrame中。如果我做 :

In [8]: df.groupby(by="B").aggregate(pd.np.sum)
Out[8]: 
    A
B    
PA  5
PO  1

它完成了工作,但C列丢失了。我也可以这样做:

In [9]: df.groupby(by=["B", "C"]).aggregate(pd.np.sum)
Out[9]: 
         A
B  C      
PA West  5
PO Est   1

要么

In [11]: df.groupby(by=["B", "C"], as_index=False).aggregate(pd.np.sum)
Out[11]: 
    B     C  A
0  PA  West  5
1  PO   Est  1

但是在两种情况下,它都按B AND C分组,而不仅是B,并且保持C值。我想做什么无关紧要,还是有办法做到?

MaxU:

尝试结合使用DataFrameGroupBy.agg()方法dict of {column -> function}

In [6]: df.groupby('B').agg({'A':'sum', 'C':'first'})
Out[6]:
       C  A
B
PA  West  5
PO   Est  1

从文档:

用于汇总组的功能。如果是函数,则必须在传递DataFrame或传递给DataFrame.apply时起作用。如果传递了dict,则键必须是DataFrame列名。

或类似这样的东西取决于您的目标:

In [8]: df = pd.DataFrame({"A": range(4), "B": ["PO", "PO", "PA", "PA"], "C": ["Est1", "Est2", "West1", "West2"]})

In [9]: df.groupby('B').agg({'A':'sum', 'C':'first'})
Out[9]:
        C  A
B
PA  West1  5
PO   Est1  1

In [10]: df['sum_A'] = df.groupby('B')['A'].transform('sum')

In [11]: df
Out[11]:
   A   B      C  sum_A
0  0  PO   Est1      1
1  1  PO   Est2      1
2  2  PA  West1      5
3  3  PA  West2      5

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我如何获取另一列上的数据?

在pandas数据框中的每一列上应用函数

如何在列中获取数据,该名称保留在python的另一列中

一列上的Pandas groupby(),然后在另一列上求和

Python:删除数据框的一列中的所有数据,并将最后一个值保留在第一行中

VIM:转到新的空行,将光标保留在上一列中

将行号保留在数据框列中

在一列上按另一列对数据框进行排序-Pandas

如何在同一列上传递同一索引以获取另一列上的重复对?

如何在另一列上显示html表的计算

将字典转换为数据框的一列,同时将字典行名保留在另一列中(python)

熊猫将重复项放在一列上,而仅将值最频繁的行保留在另一列中

在一列上进行复杂的转换,同时将原始列保留在Python / Pandas中

在数据框的一列上进行复杂的模式分离,同时将原始列保留在Python中

pandas 数据框创建一个新列,其值基于另一列上的 groupby sum

如何将一列中的值映射到数据框的另一列?

如何通过在一列上使用groupby并在另一列上使用计数在python中绘制折线图

如何在同一列上找到具有多个不同值的结果?

在查询如何在 Oracle 中的另一列上使用 order by 获取一列时

如何在保留另一列中的值的同时连接一列上的两个表?

如何通过 Pandas 在另一列上迭代列值?

Pandas:对一列进行行操作,在另一列上给出一个参考值

Pyspark如何将一列与另一列的结果相乘 - 数据框中的计数?

删除重复项但将一列的数据保留在新列中

如果在另一列上满足条件,则 Pandas 函数可对一列执行计算

如何在另一列上創建具有條件的新列?

保留在一列中具有最大项目出现次数的熊猫数据框行

如何在数据框的同一列中执行不同的操作?

Pandas 在日期时间索引和另一列上合并数据框