我有一个包含两列的表:
CREATE TABLE actions (
action_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"action" text NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
以及其中的以下数据:
action_time | action
----------------------------+--------
2016-12-30 14:12:33.353269 | a
2016-12-30 14:12:38.536818 | b
2016-12-30 14:12:43.305001 | a
2016-12-30 14:12:49.432981 | a
2016-12-30 14:12:53.536397 | b
2016-12-30 14:12:57.449101 | b
2016-12-30 14:13:01.592785 | a
2016-12-30 14:13:06.192907 | b
2016-12-30 14:13:11.249181 | b
2016-12-30 14:13:13.690897 | b
(10 rows)
Run Code Online (Sandbox Code Playgroud)
您可以假定在action_time列中没有重复的值。
如何计算从上一个动作开始连续执行的相同动作的数量?
连续执行的操作数量没有限制,任何操作都可以是最后一个。而且,对各种不同的动作没有限制:我仅使用两个来简化示例数据。
对于此示例数据,我希望结果为3。这是因为最后一个动作是“ b”,并且连续发生了3次。
我认为可以结合使用窗口函数和WITH RECURSIVE
子句来实现该解决方案,但是我不知道该怎么做。
sql postgresql window-functions gaps-and-islands postgresql-9.6
我可以使用 pandas hub_table 聚合具有缺失值的列,并将这些缺失值作为单独的类别包含在内吗?
In:
df = pd.DataFrame({'a': pd.Series(['X', 'X', 'Y', 'Y', 'N', 'N'], dtype='category'),
'b': pd.Series([None, None, 'd', 'd', 'd', 'd'], dtype='category')})
Out:
a b
0 X NaN
1 X NaN
2 Y d
3 Y d
4 N d
5 N d
In:
df.groupby('a')['b'].apply(lambda x: x.value_counts(dropna=False)).unstack(1)
Out:
NaN d
a
N NaN 2.0
X 2.0 0.0
Y NaN 2.0
Run Code Online (Sandbox Code Playgroud)
我可以使用 pandas hub_table 获得相同的结果吗?如果是的话怎么办?谢谢。