从Pandasdf中提取所有条目,其中所有年份的值都相同

ojsjcaue  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个 Dataframe ,看起来像这样(与许多其他国家,这是一个样本):

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,有时可能是另一个值,但这里的示例是100
我不知道该怎么办
输出应如下所示。

df_dict2 = {'country': ['Greece','Greece','Greece','Greece','Greece','Greece','Greece'],
           'year': [2016, 2017,2018,2019,2020,2021,2022],
           'value': [100, 100, 100, 100, 100, 100,100]}

df2 = pd.DataFrame(df_dict2)
but5z9lq

but5z9lq1#

如果您想知道在所有年份中具有相同值的国家/地区,请使用groupby.nunique

s = df.groupby('country')['value'].nunique()

out = list(s[s.eq(1)].index)

输出:['Greece']
如果你也想要这个值,那么就用布尔索引loc来获取groupby.agg

(df.groupby('country')['value'].agg(['nunique', 'first'])
   .loc[lambda d: d.pop('nunique').eq(1), 'first']
)

输出:

country
Greece    100
Name: first, dtype: int64
编辑:筛选原始数据框:
s = df.groupby('country')['value'].nunique()
df[df['country'].isin(s[s.eq(1)].index)]

或直接:

df[df.groupby('country')['value'].transform('nunique').eq(1)]

输出:

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

相关问题