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

如何从Pandas DataFrame中提取各年份value值一致的条目?

提取DataFrame中所有年份value值保持一致的国家条目

问题说明

现有如下示例DataFrame(实际包含更多国家):

import pandas as pd

df_dict = {'country': ['Japan','Japan','Japan','Japan','Japan','Japan','Japan', 'Greece','Greece','Greece','Greece','Greece','Greece','Greece'],
           'year': [2016, 2017,2018,2019,2020,2021,2022,2016, 2017,2018,2019,2020,2021,2022],
           'value': [320, 416, 172, 652, 390, 570, 803, 100, 100, 100, 100, 100, 100,100]}

df = pd.DataFrame(df_dict)

需要筛选出所有年份的value值完全相同的国家的全部数据(固定值可以是任意数值,示例中为100),预期输出为仅包含希腊的所有行数据。

解决方案

方法一:利用nunique分组统计

通过分组统计每个国家的value唯一值数量,筛选出唯一值数量为1的国家,再提取对应数据:

# 统计每个国家的value唯一值数量,筛选出数量为1的国家
consistent_mask = df.groupby('country')['value'].nunique() == 1
valid_countries = consistent_mask[consistent_mask].index

# 从原DataFrame中提取符合条件的国家数据
df2 = df[df['country'].isin(valid_countries)]

方法二:使用filter分组过滤

直接通过groupby.filter方法,保留组内所有value与组内第一个值完全一致的国家:

# 过滤出所有年份value一致的国家组
df2 = df.groupby('country').filter(lambda group: (group['value'] == group['value'].iloc[0]).all())

两种方法最终都能得到预期的输出结果:

# 输出结果
print(df2)
#    country  year  value
# 7   Greece  2016    100
# 8   Greece  2017    100
# 9   Greece  2018    100
# 10  Greece  2019    100
# 11  Greece  2020    100
# 12  Greece  2021    100
# 13  Greece  2022    100

内容的提问来源于stack exchange,提问作者A.N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36