python - 从合并列的代码中获取类别类型

标签 python python-2.7 pandas numpy dataframe

我从数据框的两列创建了唯一的数字代码。现在,我想找到数字代码到原始值之间的对应映射。

例如,

df = pd.DataFrame({"P1":["a","b","c","a"],
                   "P2":["b","c","d","c"],
                   "A":[3,4,5,6]}, index=[2,2,3,3])

print (df)
   A P1 P2
2  3  a  b
2  4  b  c
3  5  c  d
3  6  a  c

cols = ['P1','P2']
df[cols] = (pd.factorize(df[cols].values.ravel())[0]+1).reshape(-1, len(cols))
print (df)
   A  P1  P2
2  3   1   2
2  4   2   3
3  5   3   4
3  6   1   3

现在,我想将映射作为字典获取

a => 1
b => 2
c => 3
d => 4

我怎样才能得到它?

最佳答案

您可以使用索引从 factorizezip 展开第一个数组并转换为 dict:

cols = ['P1','P2']
a = (pd.factorize(df[cols].values.ravel()))

d = dict(zip(a[1][a[0]], a[0]+1))
print (d)
{'d': 4, 'b': 2, 'c': 3, 'a': 1}

df[cols] = (a[0]+1).reshape(-1, len(cols))
print (df)
   A  P1  P2
2  3   1   2
2  4   2   3
3  5   3   4
3  6   1   3

详细信息:

print (a)
(array([0, 1, 1, 2, 2, 3, 0, 2], dtype=int64), array(['a', 'b', 'c', 'd'], dtype=object))

print (a[1][a[0]])
['a' 'b' 'b' 'c' 'c' 'd' 'a' 'c']

print (a[0] + 1)
[1 2 2 3 3 4 1 3]

关于python - 从合并列的代码中获取类别类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48437196/

相关文章:

Python重启程序

python - 将函数应用于 Python 字典的所有键

python - 无法将 HTML 从网站正确转换为文本

python - 如何使用索引找到二维数组的元素? Python

python - 获取 pandas.read_csv 将空字段读取为 NaN,将空字符串读取为空字符串

python - 缺少 SAML 响应签名

python - 如何旋转 python turtle 对象

python - 根据多个条件计算 ndarray 中某个项目的出现次数?

python - pandas : pd. concat 导致重复的列

python - Pandas 数据帧 : groupby then transpose