与Python pandas中的R 因子变量最接近的等价物是什么?
问问题
19597 次
4 回答
39
这个问题似乎是从一年前开始的,但由于它仍然是开放的,所以这里有一个更新。pandas 引入了一个categorical
dtype,它的操作与 R 非常相似factors
。有关更多信息,请参阅此链接:
http://pandas-docs.github.io/pandas-docs-travis/categorical.html
从上面的链接中复制一个片段,展示如何在 pandas 中创建“因子”变量。
In [1]: s = Series(["a","b","c","a"], dtype="category")
In [2]: s
Out[2]:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a < b < c]
于 2014-11-19T17:46:49.703 回答
1
如果您希望像 R 一样将分类变量映射到数字,Pandas 实现了一个功能,它将为您提供这样的功能:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas。分解.html
import pandas as pd
df = pd.read_csv('path_to_your_file')
df['new_factor'], _ = pd.factorize(df['old_categorical'], sort=True)
此函数返回枚举映射以及唯一值列表。如果你只是在做变量赋值,你必须像上面那样把后者扔掉。
如果您想要一个本土解决方案,您可以在函数中使用集合和字典的组合。此方法更容易应用于多个列,但您必须注意 None、NaN 等将作为一个类别包含在此方法中:
def factor(var):
var_set = set(var)
var_set = {x: y for x, y in [pair for pair in zip(var_set, range(len(var_set)))]}
return [var_set[x] for x in var]
df['new_factor1'] = df['old_categorical1'].apply(factor)
df[['new_factor2', 'new_factor3']] = df[['old_categorical2', 'old_categorical3']].apply(factor)
于 2019-08-06T22:11:29.310 回答
-1
C # array containing category data
V # array containing numerical data
H = np.unique(C)
mydict = {}
for h in H:
mydict[h] = V[C==h]
boxplot(mydict.values(), labels=mydict.keys())
于 2015-05-04T06:01:34.833 回答