- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
从数字 age pandas 列,用 qcut 离散化为 ageD,我们从 qcut 边界创建开放边界:
import pandas as pd
from itertools import chain
d = {'age': {0: 5, 1: 23, 2: 43, 3: 70, 4: 30}}
df = pd.DataFrame.from_dict(d)
df['ageD'] = pd.qcut(df.iloc[:, 0], 2)
df.ageD.cat.categories
# Index([u'[5, 30]', u'(30, 70]'], dtype='object')
从 Index([u'[5, 30]', u'(30, 70]'], dtype='object') 我们制作 bopens:
>>> bopens = get_open_bounds(df)
>>> bopens
# ['(-inf, 5]', '(-inf, 30]', '(-inf, 70]', '(5, +inf)', '(30, +inf)', '(70, +inf)']
然后我们使用 get_dummies 将分类变量转换为虚拟/指标变量:
df = pd.get_dummies(df)
print df
# age ageD_[5, 30] ageD_(30, 70]
# 0 5 1 0
# 1 23 1 0
# 2 43 0 1
# 3 70 0 1
# 4 30 1 0
我想用开放边界列丰富数据框,df.shape 将是相当大,~(10e6, 32)。为每行制作 6 个 bopen cols 的最佳方法是什么?
目标 df 将如下所示:
>>> df
age age_[5, 30] age_(30, 70] (-inf, 5] (-inf, 30] (-inf, 70] (5, +inf) (30, +inf) (70, +inf)
0 5 1 0 1 1 1 0 0 0
1 23 1 0 0 1 1 1 0 0
2 43 0 1 0 0 1 1 1 0
3 70 0 1 0 0 1 1 1 0
4 30 1 0 0 1 1 1 0 0
PS:get_open_bounds 用于制作 bopens:
def get_open_bounds(df):
bounds = [(int(x[1:]), int(y[:-1])) for x, y in
[c.split(', ') for c in df.ageD.cat.categories]]
bounds = list(chain(*bounds))
bounds
# [5, 30, 30, 70]
# to get uniques, keeping the order
bounds = [b for idx, b in enumerate(bounds) if b not in bounds[:idx]]
# make the open bounds
bopens = ["(-inf, {}]".format(b) for b in bounds] + \
["({}, +inf)".format(b) for b in bounds]
return bopens
最佳答案
IIUC,你可以通过一些广播来做到这一点:
df['ageD'], bins = pd.qcut(df.iloc[:, 0], 2, retbins=True)
left = (df["age"].values <= bins[:,None]).T.astype(int)
dl = pd.DataFrame(left, columns=["(-inf, {}]".format(b) for b in bins])
dr = pd.DataFrame(1-left, columns=["({}, +inf)".format(b) for b in bins])
dout = pd.concat([pd.get_dummies(df), dl, dr], axis=1)
给我
>>> dout
age ageD_[5, 30] ageD_(30, 70] (-inf, 5] (-inf, 30] (-inf, 70] (5, +inf) (30, +inf) (70, +inf)
0 5 1 0 1 1 1 0 0 0
1 23 1 0 0 1 1 1 0 0
2 43 0 1 0 0 1 1 1 0
3 70 0 1 0 0 1 1 1 0
4 30 1 0 0 1 1 1 0 0
注意 #1:通过添加 retbins = True
我可以自己获取 bin 并避免一些笨拙的字符串解析。
注意 #2:通过隐含的“右 = 1 - 左”,我假设没有年龄是 NaN,因此 >= 或 < 之一必须为真;如果不确定,您可以改为 right = (df["age"].values > bins[:,None].T.astype(int)
。)
注意 #3:实际上我也应该传递框架构造函数 df.index —— 虽然您的示例具有规范索引,但在您的实际数据中可能并非如此。
关于python - 从离散化数值的 pandas get_dummies 创建开放边界指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529542/
在使用 get_dummies() 将分类数据转换为数字数据后,我的数据框看起来像这样 score1 score2 country_CN country _AU category_leader ca
我有需要应用单热编码的标记数据:'786.2', 'ICD-9-CM|786.2', ' ICD-9-CM', '786.2b|V13.02', 'V13.02', '279.12' , 'ICD-9
在包含有关文本文件中字符串信息的字典中,其中键是字符串,值是文件名。 Dict1 = {'str1A':'file1', 'str1B':'file1', 'str1C':'file1', 'str1
我需要对 userId X movieId 进行分类,我有两列:userId 和 movieId。 userId movieId 60265 2123 60265 2291 60265
我在处理包含 400,000 行和 300 个变量的数据集时遇到问题。我必须为包含 3,000 多个不同项目的分类变量获取虚拟变量。最后,我想得到一个包含 3,300 个变量或特征的数据集,以便我可以
我有一个具有以下架构的 pyspark 数据框: Key1Key2Key3值一个一个一个"value1"一个一个一个"value2"一个一个b"value1"bb一个"value2" (在现实生活中这
我正在研究一个数据集,它有一个称为类别的功能。该特征中每个观察的数据由分号分隔的列表组成,例如。 行 类别 第 1 行 "categorya;categoryb;categoryc" 第 2 行 “类
我正在努力为我的数据框创建虚拟列。 这是我的原始数据框: df = pd.DataFrame({'id': ['01', '02', '03'], 'Q1':
使用以下数据框: >>> df = pd.DataFrame(data={'category':['a','b','c'],'val':[1,2,3]}) >>> df category val
所以本质上我有一个包含一堆列的数据框,其中一些我想保留(存储在 to_keep 中),还有一些其他列我想使用 pandas.get_dummies 创建分类变量(这些列存储在 to_change 中)
我正在使用 pandas 系列并尝试将其转换为一种热门编码。我使用 describe 方法来检查该系列有多少个独特的类别。输出为: input['pattern'].describe(include=
我有一个 Pandas DataFrame,df。它由数字变量和分类变量组成,其中包含 NaN/NULL 值。要继续进行数据预处理,我必须对 calcategori 变量进行 one-hot 编码,并
我正在制作一个简单的可重现示例来了解培训和测试的工作原理: 示例 我想根据原产地位置预测年龄: import pandas as pd # create a simple dataset of peo
我有这个数据框: column1 column2 column3 column4 0 A A D D 1 B
这个问题已经有答案了: Dummy variables when not all categories are present (10 个回答) 已关闭 5 年前。 使用 get_dummies 方法
你好,有一个包含分类变量的 Pandas 数据框 df。 df=pandas.DataFrame(data=[['male','blue'],['female','brown'], ['male','
我有一个如下所示的数据框。 Mfr Number 列是分类数据类型。我想对其执行 get_dummies 或一种热编码,但如果它来自该行,我不想用 1 填充新列,而是希望它填充 数量列。所有其他新的“
我有一个 Pandas DataFrame,train,我是单热编码。它看起来像这样: car 0 Mazda 1 BMW 2 Honda 如果我使用 pd.get_dummies
(已编辑:我刚刚意识到我想问一个无法回答但不确定如何删除这个问题的问题...请忽略或建议我如何删除。我想我需要考虑一个不同的解决这个问题的方法。) ******--------------------
我希望利用 pandas get_dummy() 功能来编码一组(相当广泛的)分类变量。但是,数据当前采用嵌套表格格式。这意味着每一行代表另一个变量实例,例如 Instance, Cat_Col 1,
我是一名优秀的程序员,十分优秀!