Python Pandas检查一个值是否在同一天发生了一次以上

时间:2013-11-06 04:38:25

标签: python python-2.7 pandas

我有一个Pandas数据帧,如下所示。我要做的是检查一个工作站是否有变量yyy和同一天的任何其他变量(如station1的情况)。如果是这样,我需要删除包含yyy的整行。

目前我正在使用iterrows()执行此操作并循环搜索此变量出现的日期,将变量更改为“删除我”,从此构建新数据框(因为pandas doesn't support replacing in place并过滤新的数据帧以摆脱不需要的行。现在这很有效,因为我的数据帧很小,但不太可能扩展。

问题:这似乎是非常“非熊猫”的做法,还有其他方法可以删除不需要的变量吗?

                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

1 个答案:

答案 0 :(得分:4)

我可能使用布尔数组进行索引。我们想要删除行(如果我理解您要完成的内容,无论如何!),其中包含yyy和多个dateuse / station组合。

我们可以使用transform广播每个dateuse / station组合的大小,直到数据帧的长度,然后选择长度大于>的组中的行。 1.然后我们&可以yyy的位置{/ 1}}。

>>> 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