【问题标题】:How to calculate statistical metrics directly on a PDF in Pandas DataFrame?如何直接在 Pandas DataFrame 中的 PDF 上计算统计指标?
【发布时间】:2020-12-25 08:29:57
【问题描述】:

假设我已经在 Pandas DataFrame 中有一个 PDF(概率密度函数)。

import pandas as pd
import numpy as np
from scipy import stats

df = pd.DataFrame([1,2,3,4,5,6,5,4,3,2], index=np.linspace(21,30,10), columns=['days'])
df.index.names=['temperature']
print(df)
             days
temperature      
21.0            1
22.0            2
23.0            3
24.0            4
25.0            5
26.0            6
27.0            5
28.0            4
29.0            3
30.0            2

如果我想计算偏度等指标,我必须将 PDF 转换回原始数据,如下所示:

temp_history = []
for i in df.iterrows():
    temp_history += i[1][0] * [i[0]]

print(temp_history)
[21.0, 22.0, 22.0, 23.0, 23.0, 23.0, 24.0, 24.0, 24.0, 24.0, 25.0, 25.0, 25.0, 25.0, 25.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 27.0, 27.0, 27.0, 27.0, 27.0, 28.0, 28.0, 28.0, 28.0, 29.0, 29.0, 29.0, 30.0, 30.0]

skew = stats.skew(temp_history)

无论如何我可以计算指标而无需创建 temp_history 吗?谢谢!

编辑:我想避免以任何形式创建原始数据的原因是我不想仅仅在days 列中的数字变大时丢失大量内存。

【问题讨论】:

    标签: python pandas numpy scipy data-analysis


    【解决方案1】:

    使用-

    df.reindex(df.index.repeat(df['days'])).reset_index()['temperature'].skew()
    

    坚持原来的实现 -

    stats.skew(df.reindex(df.index.repeat(df['days'])).reset_index()['temperature'])
    

    如果您想知道为什么输出不匹配,请在here 进行讨论

    为了匹配两者,在stats.skew()中设置bias=False

    【讨论】:

    • 非常感谢!所以我想真的没有办法直接在 pdf 数据帧上计算指标吗?我唯一担心的是,当“天”中的数字变得非常大时,性能可能会受到影响。
    猜你喜欢
    • 2019-11-22
    • 2021-08-05
    • 2023-03-11
    • 2016-04-04
    • 2021-04-16
    • 2019-01-19
    • 2019-08-01
    • 2017-12-15
    相关资源
    最近更新 更多