gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:46:34 25 4
gpt4 key购买 nike

我有一个数据框,它有一个多索引(股票代码和日期),其中有一列对每只股票进行计数,每行中“虚拟”列中出现 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com