[英]How do filter a pandas dataframe by other rows in the same dataframe?
两个熊猫问题:
如何在不将该列添加到数据框中的情况下加入已修改的列?
你怎么做相当于“左边连接ZZ ... ZZ.ID为空”
我在SQL下面有一个具有这两个功能的示例。
假设我翻了一下硬币100次,注意它是哪个翻盖。 每次它落在HEADS上时,我都会在一个带有“flipNumber”的名为“coin_flips”的表格中添加一行。 该表看起来像这样
flipNumber
4
5
7
12
13
14
16
我想拉出计数间隙之前出现的每个“flipNumber”。 从上面的例子中,我想拉5,7,14,16。使用SQL,我可以像这样拉:
select
v1.flipNumber
from
coin_flips v1
left join
coin_flips v2
on v2.flipNumber = v1.flipNumber +1
where
v2.flipNumber is null
我如何在熊猫中做同样的事情?
我发现的一个解决方案是使用pandasql ,它允许你编写针对数据帧的sql查询,但我想知道如何在本地执行它。
s = pd.Series([4, 5, 7, 12, 13, 14, 16], name='flipNumber')
s[(s.shift(-1) - s) > 1]
从一个数字到另一个数字得到差异
s.shift(-1) - s
检查它是否大于1.这表明存在差距
(s.shift(-1) - s) > 1
将其用作原始系列的面具
s[(s.shift(-1) - s) > 1]
这能够得到你所说的你之前真正的差距之前的第一个数字。 使用你的例子,我们最终应该[5, 7, 14]
。 16不是也不应该包括在内,因为你不知道是否会有后续的差距。 如果你坚持要包括最后一点,我们可以修改它以包含但你必须指定一个规则来执行它。
pandas有连接,合并,连接等等,但这些并不是完成这项任务所必需的。
在我提供的代码中, (s.shift(-1) - s) > 1
与on v2.flipNumber = v1.flipNumber +1
sql代码相反。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.