40

与Python pandas中的R 因子变量最接近的等价物是什么?

4

4 回答 4

39

这个问题似乎是从一年前开始的,但由于它仍然是开放的,所以这里有一个更新。pandas 引入了一个categoricaldtype,它的操作与 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 回答
6

如果你想做建模等,patsy 库中有很多好东西。我承认我自己也曾为此苦苦挣扎。我发现这些幻灯片很有帮助。希望我能举一个更好的例子,但这是我自己得到的。

于 2013-04-14T06:08:22.513 回答
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 回答