两个熊猫问题:
如何在不将该列添加到数据框中的情况下加入已修改的列?
你怎么做相当于“左边加入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查询,但我想知道如何本地执行。
答案 0 :(得分:0)
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不是也不应该包括在内,因为你不知道是否会有后续的差距。如果你坚持要包括最后一点,我们可以修改它以包含但你必须指定一个规则来执行它。
在我提供的代码中,(s.shift(-1) - s) > 1
与sql代码on v2.flipNumber = v1.flipNumber +1