我有一个 Pandas 数据框,如下所示。我想做的是检查一个电台是否有变量yyy
以及同一天的任何其他变量(如station1
)。如果这是真的,我需要删除包含的整行yyy
.
目前我正在使用iterrows()
并循环搜索该变量出现的日期,将变量更改为“删除我”之类的内容,由此构建一个新的数据框(因为pandas 不支持原地替换 https://stackoverflow.com/questions/15972264/why-doesnt-this-function-take-after-i-iterrows-over-a-pandas-dataframe)并过滤新数据帧以删除不需要的行。这现在有效,因为我的数据帧很小,但不太可能扩展。
问题:这似乎是一种非常“非熊猫”的方法,是否有其他方法可以删除不需要的变量?
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
/station
组合。
我们可以用transform
广播每个的大小dateuse
/station
组合到数据帧的长度,然后选择长度> 1的组中的行。然后我们可以&
这与其中yyy
s are.
>>> 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)