小编Rom*_*siv的帖子

在有序行集中计算相等的连续值

我有一个包含两列的表:

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

5
推荐指数
1
解决办法
100
查看次数

我可以使用pandas的pivot_table来聚合缺失值的列吗?

我可以使用 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 获得相同的结果吗?如果是的话怎么办?谢谢。

python pivot-table nan dataframe pandas

5
推荐指数
1
解决办法
598
查看次数