如何从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.
相关产品推荐
相关产品推荐

