3

我有一个如下的 Pandas 数据框。我想要做的是检查一个站是否yyy在同一天有变量和任何其他变量(如station1)。如果这是真的,我需要删除包含yyy.

目前我正在使用iterrows()并循环搜索该变量出现的日期,将变量更改为“删除我”之类的内容,从中构建一个新的数据框(因为熊猫不支持就地替换)并过滤新的数据框以摆脱不需要的行。这现在有效,因为我的数据框很小,但不太可能扩展。

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

                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
4

1 回答 1

4

我可能会使用布尔数组进行索引。yyy我们想删除具有多个dateuse/station组合的行(如果我明白你在做什么,无论如何!) 。

我们可以使用transform广播每个dateuse/station组合的大小直到数据帧的长度,然后选择长度> 1的组中的行。然后我们可以&yyys在哪里。

>>> 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
于 2013-11-06T04:58:01.910 回答