Python Pandas中最近等效的因子变量

时间:2013-02-27 23:16:35

标签: python r pandas

R Factor variable中的Python pandas最接近的是什么?

4 个答案:

答案 0 :(得分:26)

这个问题似乎是从一年前开始的,但由于它仍在开放,因此这是一个更新。 pandas引入了categorical dtype,它与R中的factors非常相似。请参阅此链接以获取更多信息:

http://pandas-docs.github.io/pandas-docs-travis/categorical.html

从上面的链接重新生成一个片段,显示如何在pandas中创建“factor”变量。

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]

答案 1 :(得分:7)

如果您正在寻找建模等,那么patsy library中的因素很多。我承认自己也在努力解决这个问题。我发现these slides很有帮助。希望我能给出一个更好的例子,但就我自己而言,这是一个很好的例子。

答案 2 :(得分:0)

如果您希望像R一样将分类变量映射到数字,Pandas实现了一个函数,可以为您提供:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.factorize.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)

答案 3 :(得分:-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())