我有一个如下所示的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_equal
和1.0
列中的X
? >
我要实现的输出是一个新的布尔列,如下所示:
contains_specific_value
0 False
1 False
2 False
3 False
4 True
5 False
6 False
答案 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