熊猫groupby列,并检查组是否满足多个条件

时间:2020-02-14 19:36:11

标签: python pandas group-by

我有一个如下所示的DataFrame:

      X       Y      Date       are_equal
0   50.0    10.0  2018-08-19      False
1    NaN    10.0  2018-08-19      False
2    NaN    50.0  2018-08-19       True
3   10.0     NaN  2018-08-21      False
4    1.0     NaN  2018-08-19      False
5    NaN    10.0  2018-08-22      False
6   10.0     NaN  2018-08-21      False

are_equal列表示Y中的值在X中处于同一日期(在这种情况下为50.0)。

我正在尝试按日期分组,以查找X是否包含特定值(例如1.0),该日期包含are_equal True

我的方法是使用df.iterrows(),并在满足条件df['are_equal'] == True之后在下一个索引处获取行。但是,行不一定要排序。

如何将Date分组,并检查同一日期的True中的日期是否包含are_equal1.0列中的X? >

我要实现的输出是一个新的布尔列,如下所示:

   contains_specific_value
0    False
1    False
2    False
3    False
4    True
5    False
6    False

1 个答案:

答案 0 :(得分:0)

让我们做apply,这可以增加更多条件,但速度很慢。您可以从transform

检查其他解决方案
df['New']=df.groupby('Date').apply(lambda x : (x['X']==1)&x['are_equal'].any()).reset_index(level=0,drop=True)
df
Out[101]: 
      X     Y        Date  are_equal    New
0  50.0  10.0  2018-08-19      False  False
1   NaN  10.0  2018-08-19      False  False
2   NaN  50.0  2018-08-19       True  False
3  10.0   NaN  2018-08-21      False  False
4   1.0   NaN  2018-08-19      False   True
5   NaN  10.0  2018-08-22      False  False
6  10.0   NaN  2018-08-21      False  False

transform

df['X'].eq(1)&(df.groupby('Date').X.transform('any'))
Out[102]: 
0    False
1    False
2    False
3    False
4     True
5    False
6    False
Name: X, dtype: bool