pandas中groupby问题记录

1、如果groupby的列中存在空值,则该分组将被忽略

import pandas as pd
import numpy as np 


def test_groupby(group):
    """测试groupby函数"""
    if set(['group1', 'group2']).intersection(set(data.columns)):
        group['flag'] = 1
    else:
        group['flag'] = 0
    return group

data = pd.DataFrame({'group1': ['a', 'a', 'b', 'b', np.NaN, 'c'], 
                     'group2': [np.NaN, 'd', 'e', 'e', 'f', 'f'], 
                     'value1': [1, 2, 3, 4, 5, 6]})

df = data.groupby(['group1', 'group2']).apply(lambda x: test_groupby(x)).reset_index(drop=True)
df

        如上,按照group1和group2进行分组统计,但是group1和group2中分别存在空值,输出结果如下,

而原data数据如下,

         可以对比看到图中红框所示在groupby之后被忽略掉了。

        如果想保留红框数据,使其能够参与到groupby的过程,可以在groupby之前对分组字段(即上面的group1、group2进行空值填充),如下,

import pandas as pd
import numpy as np 


def test_groupby(group):
    """测试groupby函数"""
    if set(['group1', 'group2']).intersection(set(data.columns)):
        group['flag'] = 1
    else:
        group['flag'] = 0
    return group

data = pd.DataFrame({'group1': ['a', 'a', 'b', 'b', np.NaN, 'c'], 
                     'group2': [np.NaN, 'd', 'e', 'e', 'f', 'f'], 
                     'value1': [1, 2, 3, 4, 5, 6]})
# 对分组字段进行空值填充
data.fillna({'group1': '', 'group2': ''}, inplace=True)

df = data.groupby(['group1', 'group2']).apply(lambda x: test_groupby(x)).reset_index(drop=True)
df

其输出结果如下,

        可见所有数据均参与到了groupby的过程。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`pandas`是Python常用的数据处理库,提供了很多方便的数据操作功能。其`groupby`是一个非常强大的功能,可以对数据进行分组操作,然后进行聚合计算、变换、过滤等操作。下面是一个示例,展示`groupby`的使用方法。 假设我们有一个数据集,包含销售人员的销售记录,每条记录包括销售人员姓名、销售日期、销售金额等信息。我们想要按照销售人员进行分组,然后统计每个人的销售总金额、平均销售金额、最大销售金额等等。 首先,我们需要创建一个`DataFrame`对象,包含销售记录: ```python import pandas as pd data = {'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'], 'Date': ['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02'], 'Amount': [100, 200, 150, 300, 250, 200]} df = pd.DataFrame(data) ``` 这个`DataFrame`对象包含三列:`Name`、`Date`、`Amount`。我们可以使用`groupby`方法按照`Name`进行分组,然后进行聚合计算: ```python grouped = df.groupby('Name') result = grouped.agg({'Amount': ['sum', 'mean', 'max']}) print(result) ``` 上面的代码,`grouped = df.groupby('Name')`将数据按照`Name`进行分组,并返回一个`GroupBy`对象,可以对它进行聚合计算。`result = grouped.agg({'Amount': ['sum', 'mean', 'max']})`对`GroupBy`对象进行聚合计算,计算每个人的销售总金额、平均销售金额、最大销售金额,并将结果保存在`result`对象。 输出结果如下: ``` Amount sum mean max Name Alice 400 200.0 300 Bob 450 225.0 250 Charlie 350 175.0 200 ``` 可以看到,`result`对象包含每个人的销售总金额、平均销售金额、最大销售金额。我们可以看到,Alice在2021-01-02这一天卖出了销售金额最高的商品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

煮雨小筑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值