Pandas:在组内使用条件进行迭代

2024-10-03 00:30:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于此的数据框(注意,这是一个示例,我的实际数据框有数千行和数百个组)

pd.DataFrame({'a':['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], 
              'year':[2018, 2019, 2020, 2018, 2020, 2018, 2019, 2020], 
              'c':[1, 2, 4, 2, 4, 4, 4, 3]})

   a  year  c
0  A  2018  1
1  A  2019  2
2  A  2020  4
3  B  2018  2
4  B  2020  4
5  C  2018  4
6  C  2019  4
7  C  2020  3

我需要检查“a”列中每个组的以下条件:

  1. 是否每年(即2018年、2019年、2020年)存在一行
  2. “c”列中的值是否从一年增加到下一年,即2020年的值是否高于2019年,而不是2018年

如果这两个条件都为真,我想在该组的“d”列中设置一个“真”值

   a  year  c   d
0  A  2018  1  TRUE
1  A  2019  2  TRUE
2  A  2020  4  TRUE
3  B  2018  2  FALSE
4  B  2020  4  FALSE
5  C  2018  4  FALSE
6  C  2019  4  FALSE
7  C  2020  3  FALSE

在我的例子中,只有A组满足这两个条件。B组没有2019年的数据,C组的值从一年到下一年没有增加

我试过群比,但没有成功。我认为这需要时间,但不知道如何开始


Tags: 数据falsetrue示例dataframe时间条件year
1条回答
网友
1楼 · 发布于 2024-10-03 00:30:40

我们可以用apply+reindex做条件

df['cond']=df.groupby('a').apply(lambda x : pd.Series([2018,2019,2020]).isin(x['year']).all() & x['c'].diff().fillna(1).gt(0).all()).reindex(df.a).values
df
   a  year  c   cond
0  A  2018  1   True
1  A  2019  2   True
2  A  2020  4   True
3  B  2018  2  False
4  B  2020  4  False
5  C  2018  4  False
6  C  2019  4  False
7  C  2020  3  False

相关问题 更多 >