我有一个如下所示的 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
The are_equal
列表示其中的值Y
is in X
在同一日期(在本例中50.0
).
我正在尝试按日期分组并查找是否X
包含特定值(例如1.0
) 对于包含以下内容的日期are_equal
True
.
我的方法是使用df.iterrows()
并在满足条件后获取下一个索引处的行df['are_equal'] == True
。但是,行不一定是有序的。
我怎样才能分组Date
并检查日期是否包含True
in are_equal
and 1.0
在列中X
同一日期?
我试图实现的输出是一个新的布尔列,如下所示:
contains_specific_value
0 False
1 False
2 False
3 False
4 True
5 False
6 False
让我们做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
Or 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)