- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在此处的 Pandas 笔记本上
我看到 qcut 的结果被分配为 DataFrame 的新列。 Dataframe 有两列,但以某种方式将 qcut 输出分配给新列会神奇地找到“var”变量所在的正确级别——另一个变量未被检查。这里的 Pandas 语义是什么?示例输出如下:
In [2]:
from pandas import *
from statsmodels.formula.api import logit
from statsmodels.nonparametric import KDE
from patsy import dmatrix, dmatrices
In [3]:
df = read_csv('wells.dat', sep = ' ', header = 0, index_col = 0)
print df.head()
switch arsenic dist assoc educ
1 1 2.36 16.826000 0 0
2 1 0.71 47.321999 0 0
3 0 2.07 20.966999 0 10
4 1 1.15 21.486000 0 12
5 1 1.10 40.874001 1 14
In [4]:
model_form = ('switch ~ center(I(dist / 100.)) + center(arsenic) + ' +
'center(I(educ / 4.)) + ' +
'center(I(dist / 100.)) : center(arsenic) + ' +
'center(I(dist / 100.)) : center(I(educ / 4.)) + ' +
'center(arsenic) : center(I(educ / 4.))'
)
model4 = logit(model_form, df = df).fit()
In [20]:
resid_df = DataFrame({'var': df['arsenic'], 'resid': model4.resid})
resid_df[:10]
Out [20]:
resid var
1 0.842596 2.36
2 1.281417 0.71
3 -1.613751 2.07
4 0.996195 1.15
5 1.005102 1.10
6 0.592056 3.90
7 0.941372 2.97
8 0.640139 3.24
9 0.886626 3.28
10 1.130149 2.52
In [15]:
qcut(df['arsenic'], 40)
Out [15]:
Categorical: arsenic
array([(2.327, 2.47], (0.68, 0.71], (1.953, 2.07], ..., [0.51, 0.53],
(0.62, 0.64], (0.64, 0.68]], dtype=object)
Levels (40): Index([[0.51, 0.53], (0.53, 0.56], (0.56, 0.59],
(0.59, 0.62], (0.62, 0.64], (0.64, 0.68],
(0.68, 0.71], (0.71, 0.75], (0.75, 0.78],
(0.78, 0.82], (0.82, 0.86], (0.86, 0.9], (0.9, 0.95],
(0.95, 1.0065], (1.0065, 1.0513], (1.0513, 1.1],
(1.1, 1.15], (1.15, 1.2], (1.2, 1.25], (1.25, 1.3],
(1.3, 1.36], (1.36, 1.42], (1.42, 1.49],
(1.49, 1.57], (1.57, 1.66], (1.66, 1.76],
(1.76, 1.858], (1.858, 1.953], (1.953, 2.07],
(2.07, 2.2], (2.2, 2.327], (2.327, 2.47],
(2.47, 2.61], (2.61, 2.81], (2.81, 2.98],
(2.98, 3.21], (3.21, 3.42], (3.42, 3.791],
(3.791, 4.475], (4.475, 9.65]], dtype=object)
In [17]:
resid_df['bins'] = qcut(df['arsenic'], 40)
resid_df[:20]
Out [17]:
resid var bins
1 0.842596 2.36 (2.327, 2.47]
2 1.281417 0.71 (0.68, 0.71]
3 -1.613751 2.07 (1.953, 2.07]
4 0.996195 1.15 (1.1, 1.15]
5 1.005102 1.10 (1.0513, 1.1]
6 0.592056 3.90 (3.791, 4.475]
7 0.941372 2.97 (2.81, 2.98]
8 0.640139 3.24 (3.21, 3.42]
为“var”找到了正确的bin,赋值没注意“resid”。
最佳答案
我发现做问题的标题描述的唯一一般方法是:
quartiles = pd.qcut(df['ValToRank'], 4, labels=range(1,5))
df = df.assign(Quartile=quartiles.values)
这会将四分位数排名值分配为新的 DataFrame
列 df['Quartile']
。
关于python - 将 qcut 分配为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14959722/
假设我有一个数据框: import numpy as np import pandas as pd df = pd.DataFrame(np.random.normal(0,1,[100,50]))
我想将 pandas qcut 应用于滚动窗口。我不知道该怎么做...想法是在过去 20 天中,找到属于上四分位数的值,找到上四分位数中的值的平均值。并返回该滚动时间序列的平均值。 如果我有 s =
这是一个简单的数据样本系列: sample Out[2]: 0 0.047515 1 0.026392 2 0.024652 3 0.022854 4 0.020397
我创建了一个分类变量,我想为其他变量的特定值创建一个新类别 我有一个带有变量 Score 的数据框,其值介于 0-100 之间。我做了十分之一,但我想为特定值创建一个新类别 df['Score_pr'
考虑以下数据: s = pd.Series([1, 1, 1, 2]) pd.qcut(s, 2, labels=False) 我想要等概率组,即 [0, 0, 1, 1]。相反,qcut 可以引发异
在此处的 Pandas 笔记本上 http://nbviewer.ipython.org/urls/raw.github.com/carljv/Will_it_Python/master/ARM/ch
我有一个数据框,我可以从中选择一个列(系列),如下所示: df: value_rank 275488 90 275490 35 275491
Pandas docs关于 qcut 函数有这样的说法: Discretize variable into equal-sized buckets based on rank or based on
我使用 pandas.qcut 将数据分为 5 组,并希望根据 qcut 的最小和最大分数来标记每个组。 例如,我尝试使用数据框列中的“年龄”数据。 df['age group'] = pd.qcut
我正在慢慢地从 R 转向 python + pandas,我面临着一个我无法解决的问题...... 我需要离散化一列中的值,方法是将它们分配给 bin,并将具有这些 bin 名称的列添加到原始 Dat
假设我有一个列表: a = [3, 5, 1, 1, 3, 2, 4, 1, 6, 4, 8] 和一个子列表: b = [5, 2, 6, 8] 我想通过 pd.qcut(a,2) 获取 bin 并计
有没有一种方法可以构造 Pandas groupby 和 qcut 命令以返回具有嵌套图 block 的一列?具体来说,假设我有 2 组数据,我希望将 qcut 应用于每组,然后将输出返回到一列。这类
我的问题和上一个一样: Binning with zero values in pandas 但是,我仍然想在分位数中包含 0 值。有没有办法做到这一点?换句话说,如果我有 600 个值,其中 50%
有两个 ndarray: import pandas as pd import numpy as np a = np.arange(0,100, 10) b = np.random.random_in
我对 groupby 结果应用 qcut,以下是我的问题的简化版本: a = pd.DataFrame({'A':[1,1,1,1,2,2,2,2], 'B': [
我正在做 Recency-Frequency-Monetary 分析,虽然我有一个在 Python 中工作的模型,但由于生产代码主要是 PHP(Oracle 12c fwiw 或者也可以在 postg
我在名为example 的对象的列中有很多分数。我想将这些分数分成十分位数,并为每一行分配相应的十分位数间隔。我尝试了以下方法: import random import pandas as pd r
更新:从版本 0.20.0 开始,pandas cut/qcut 确实可以处理日期字段。参见 What's New了解更多。 pd.cut and pd.qcut now support dateti
我正在使用 pandas qcut 将一些数据分成 20 个 bin,作为数据准备的一部分,用于训练二进制分类模型,如下所示: data['VAR_BIN'] = pd.qcut(cc_data[va
我有一个包含 499 条记录的埃博拉数据集。我试图根据概率(概率变量)找到每个五分位数中的观察次数。观察次数应分为 0-20%、20-40% 等类别。我认为这样做的代码是, test = pd.qcu
我是一名优秀的程序员,十分优秀!