繁体   English   中英

如何通过同一数据框中的其他行过滤pandas数据帧?

[英]How do filter a pandas dataframe by other rows in the same dataframe?

两个熊猫问题:

  1. 如何在不将该列添加到数据框中的情况下加入已修改的列?

  2. 你怎么做相当于“左边连接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) > 1on v2.flipNumber = v1.flipNumber +1 sql代码相反。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM