You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas使用groupby统计各国水果数量并保留完整dataframe的实现方法

你之前的写法会将DataFrame聚合为每个国家仅一行的统计结果,直接覆盖原df会丢失其余列和原有行结构,不符合需求。

可以使用pandas的transform方法实现需求,它会在分组计算后将统计结果广播到分组内的所有行,返回和原数据长度一致的序列,直接作为新列赋值即可,不会改变原数据的结构。

核心实现代码

df['Number'] = df.groupby('Country')['Fruits'].transform('count')

完整可运行示例

import pandas as pd

# 构造样本数据集
data = {
    'Country': ['India','India','India','India','Germany','Germany','Germany','Japan','Japan'],
    'Fruits': ['Mango','Apple','Banana','Grapes','Apple','Mango','Kiwi','Kaki','melon'],
    'Price': [200,250,50,150,350,500,200,300,200],
    'Sold': ['Market','Shops','Market','Road','Supermarket','Supermarket','Online','Online','Supermarket'],
    'Weather': ['sunny','sunny','winter','sunny','Autumn','Rainy','Spring','sunny','sunny']
}
df = pd.DataFrame(data)

# 新增每个国家对应水果数量的统计列
df['Number'] = df.groupby('Country')['Fruits'].transform('count')

# 输出结果和预期完全一致
print(df)

可选替代方案

如果是更复杂的多维度统计场景,也可以先计算分组统计结果,再通过merge关联回原数据集:

# 先统计每个国家的水果数量
count_df = df.groupby('Country')['Fruits'].count().reset_index(name='Number')
# 关联回原数据集
df = df.merge(count_df, on='Country', how='left')

内容的提问来源于stack exchange,提问作者Nithya Babu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:02