Python将检查一个值是否在同一天出现一次以上
我有一个熊猫数据框,如下所示。我试图做的是检查一个站点是否在同一天有变量Python将检查一个值是否在同一天出现一次以上,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个熊猫数据框,如下所示。我试图做的是检查一个站点是否在同一天有变量yyy和任何其他变量(如station1)。如果这是真的,我需要删除包含yyy的整行 目前,我正在使用iterrows()和循环来搜索该变量出现的日期,将该变量更改为类似“delete me”的内容,从中构建一个新的数据框(因为),并过滤新的数据框以除去不需要的行。因为我的数据帧很小,但不太可能扩展,所以现在可以这样做了 问题:这似乎是一种非常“非熊猫”的方法,是否有其他方法删除不需要的变量
yyy
和任何其他变量(如station1
)。如果这是真的,我需要删除包含yyy
的整行
目前,我正在使用iterrows()
和循环来搜索该变量出现的日期,将该变量更改为类似“delete me”的内容,从中构建一个新的数据框(因为),并过滤新的数据框以除去不需要的行。因为我的数据帧很小,但不太可能扩展,所以现在可以这样做了
问题:这似乎是一种非常“非熊猫”的方法,是否有其他方法删除不需要的变量
dateuse station variable1
0 2012-08-12 00:00:00 station1 xxx
1 2012-08-12 00:00:00 station1 yyy
2 2012-08-23 00:00:00 station2 aaa
3 2012-08-23 00:00:00 station3 bbb
4 2012-08-25 00:00:00 station4 ccc
5 2012-08-25 00:00:00 station4 ccc
6 2012-08-25 00:00:00 station4 ccc
我可以使用布尔数组进行索引。我们想删除包含
yyy
和多个dateuse
/站组合的行(如果我理解您的目的的话!)
我们可以使用transform
来广播每个dateuse
/站组合的大小,直到数据帧的长度,然后在组中选择长度大于1的行。然后我们可以&
这与yyy
的位置有关
>>> multiple = df.groupby(["dateuse", "station"])["variable1"].transform(len) > 1
>>> must_be_isolated = df["variable1"] == "yyy"
>>> df[~(multiple & must_be_isolated)]
dateuse station variable1
0 2012-08-12 00:00:00 station1 xxx
2 2012-08-23 00:00:00 station2 aaa
3 2012-08-23 00:00:00 station3 bbb
4 2012-08-25 00:00:00 station4 ccc
5 2012-08-25 00:00:00 station4 ccc
6 2012-08-25 00:00:00 station4 ccc
这是可行的,但我很确定为什么。。。尤其是df[~(multiple&must\u isolated)]
做了什么?print multiple
将显示它是一个布尔数组,只要行是(dateuse,station
)组的成员且长度>1
,它就是真的
必须被隔离
只是一个数组,只要variable1==“yyy”
时,该数组就是真的multiple&must\u isolated
是一个booolean数组,它是True
,每当我们想单独(这里是yyy
)在一个包含多个成员的组中时,它都是True
。这些是我们要删除的行~(mul..&must..)
是它的否定,我们要保留的行df[这里的一些布尔数组]
选择这些行。这有意义吗?