pandas - 根据数据帧中数字的连续出现计算条件概率

标签 pandas dataframe pandas-groupby

我有一个数据框,它有一个多索引(股票代码和日期),其中有一列对每只股票进行计数,每行中“虚拟”列中出现 1 或 0 的次数。我有一个例子下面。

df = pd.DataFrame(  {
'stock': ['AAPL', 'AAPL', 'AAPL','AAPL', 'MSFT', 'MSFT','MSFT', 'MSFT'], 
'datetime': ['2015-01-02', '2015-01-03', '2015-01-04', '2015-01-05', '2015-01-02', '2015-01-03', '2015-01-04', '2015-01-05'],
'Dummy': [0, 0, 1, 1, 1,1, 0, 1],
'Counter': [-1, -2, 1, 2, 1, 2, -1, 1]})
df['datetime'] = pd.to_datetime(df['datetime'])
df.set_index(['stock', 'datetime'], inplace =True)

我想计算一个条件概率(对于每个数字)来回答这个问题:

鉴于我在计数器列中观察到有 1 行,它后面跟着 2 的次数有多少次,后面跟着 -1 的次数有多少次。

在上面的示例中,有 3 个 1 实例。最后一个后面没有任何内容,因此应该忽略它,因此从技术上讲只有 2 个实例。它们后面都跟着 2,所以 1 的输出应该如下所示:

result = pd.DataFrame(  {
'cond prob': ['1', '2', '-1','-2'],
'1': [0, 2, 0,0],
'2': [0, 0, 1,0],
'-1': [1, 0, 0, 1],
'-2': [1, 0, 0, 0]})

 result.set_index(['cond prob',], inplace =True)

基本上,我想知道每个数字出现了多少次 后跟任何其他数字(按库存分组)。

此问题是与本文相关的后续问题:

Counting the number of consecutive occurences of numbers in dataframe with multi index daily data

最佳答案

我们可以groupbyshiftCounter列,然后使用crosstab创建一个频率表来计算数量某个数字后面跟着其他数字的次数

table = pd.crosstab(df['Counter'], df.groupby(level=0)['Counter'].shift(-1))

>>> table

Counter  -2.0  -1.0   1.0   2.0
Counter                        
-2          0     0     1     0
-1          1     0     1     0
 1          0     0     0     2
 2          0     1     0     0

如果您还需要计算概率,我们可以首先使用 values_counts 计算所有可能的结果,然后将有利的结果除以所有可能的结果

probs = table.div(df['Counter'].value_counts(), axis=0)

>>> probs

Counter  -2.0  -1.0   1.0       2.0
-2        0.0   0.0   1.0  0.000000
-1        0.5   0.0   0.5  0.000000
 1        0.0   0.0   0.0  0.666667
 2        0.0   0.5   0.0  0.000000

关于pandas - 根据数据帧中数字的连续出现计算条件概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67358580/

相关文章:

python - Jupyter输入、显示、打印执行顺序困惑

python - 如何在数组中找到N个连续数字相等?

python - 将刻度数据转换为 OHLCV 烛台数据

python - 使用键重新组合 pandas 中的数据框。比迭代行更快的方法?

python - Pandas - GroupBy 2 列 - 无法重置索引

python - 来自 datetimeindex pandas 的时间序列 x 轴日期

pandas - 将 DataFrame 列映射到 2 个不同的字典

R:重新思考数据(如何重新排列一组列中的一列?)

python - 在 Pandas 数据帧 .loc 中使用 Python 的 `in` 运算符

r - 缓慢的 data.frame 行分配