Python-groupby分组

组内个数

在Pandas中,你可以通过使用 `.size()` 方法来确定使用 `groupby` 后每个分组的数量。这个方法会返回一个新的 Series,其中包含每个分组的大小(即每个分组中的行数)。

下面是一个例子:

import pandas as pd

# 假设 df 是你的原始 DataFrame
df = pd.DataFrame({
    'sdate': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03'],
    'instrument': ['A', 'A', 'B', 'B', 'C'],
    'value': [1, 2, 3, 4, 5]
})

# 使用 groupby 按 'sdate' 和 'instrument' 分组
grouped = df.groupby(['sdate', 'instrument'])

# 获取每个分组的大小(数量)
group_sizes = grouped.size()

print(group_sizes)

输出结果将是一个 Series,其索引是 'sdate' 和 'instrument' 的唯一组合,值是每组的大小:

sdate       instrument
2021-01-01  A             2
2021-01-02  B             2
2021-01-03  C             1
dtype: int64

如果你想要一个 DataFrame 而不是 Series,你可以调用 `.reset_index()` 方法,并且可以为分组大小列命名:

group_sizes_df = group_sizes.reset_index(name='size')
print(group_sizes_df)

这将给你一个包含分组大小的 DataFrame:

sdate       instrument
2021-01-01  A             2
2021-01-02  B             2
2021-01-03  C             1
dtype: int64

现在,`group_sizes_df` 包含了每个分组的日期、工具和大小。这样你就可以很容易地看到每个分组有多少行了。

组的个数

要确定在使用 `groupby` 后一共有多少个不同的组,可以通过以下几种方法来实现:

1. 使用 `ngroups` 属性:`ngroups` 属性会直接给出分组后的组数。

grouped = df.groupby(["sdate", "instrument"])
number_of_groups = grouped.ngroups

2. 使用 `nunique()` 方法:如果想要对分组键进行唯一计数,可以使用 `nunique()` 方法分别对每个分组键进行计数,然后取最小的那个数(假设每个组至少有一个行)。

number_of_groups = df['sdate'].nunique()  # 假设 'sdate' 是分组键之一。

如果使用了多个键进行分组,可以先创建一个表示所有分组键的组合的临时列,然后计算这个列的唯一值数量:

df['group_key'] = df['sdate'].astype(str) + "_" + df['instrument'].astype(str)
number_of_groups = df['group_key'].nunique()
del df['group_key']  # 删除临时列

3. 使用 `groupby` 和 `size()`,然后获取结果的长度:`size()` 方法会返回一个包含每个组大小的 Series,您可以通过获取这个 Series 的长度来知道有多少个组。

group_sizes = df.groupby(["sdate", "instrument"]).size()
number_of_groups = len(group_sizes)

在上面的代码中,`group_sizes` 是一个 Series,它的索引是组合键,这些组合键的唯一值的数量,即 `len(group_sizes)`,就是组的数量。这种方法同时也告知每个组内的行数,但如果只关心组的数量,只需要获取这个 Series 的长度即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值