python - 如何直接在 Pandas DataFrame 中的 PDF 上计算统计指标?
问题描述
假设我已经在 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
。
解决方案
利用 -
df.reindex(df.index.repeat(df['days'])).reset_index()['temperature'].skew()
或者
要坚持您的原始实施 -
stats.skew(df.reindex(df.index.repeat(df['days'])).reset_index()['temperature'])
如果您想知道为什么输出不匹配,请在此处讨论
为了匹配两者,bias=False
设置stats.skew()
推荐阅读
- python - 如何从路径的用户那里获取输入,我必须将多个 excel 文件头和文件名合并到 python 中的其他 excel 文件中
- javascript - JavaScript Promise 构造函数
- ruby-on-rails - 受保护的 state_machines 事件
- python - 有没有办法检测电报机器人是否已私下启动?
- rust - 如何在 Rust 的闭包内重用外部范围的值?
- flutter - 如何在 TextField Flutter 中更改标签的文本颜色
- java - 尝试合并球时出现数组错误“错误:需要数组,但找到了 int”
- python - 向mysql插入数据?一个一个或一个整体的数据哪一个是更好的方法呢?
- oauth-2.0 - 刷新令牌的认知更新
- mysql - from 语句中的 Laravel 子查询