熊猫中的多列分解

Chr*_*isB 12 python enumeration pandas data-cleaning

pandas factorize函数将一系列中的每个唯一值分配给基于0的顺序索引,并计算每个系列条目所属的索引.

我想pandas.factorize在多列上完成相同的操作:

import pandas as pd
df = pd.DataFrame({'x': [1, 1, 2, 2, 1, 1], 'y':[1, 2, 2, 2, 2, 1]})
pd.factorize(df)[0] # would like [0, 1, 2, 2, 1, 0]
Run Code Online (Sandbox Code Playgroud)

也就是说,我想确定数据帧的几列中每个唯一值的元组,为每个列分配一个顺序索引,并计算数据帧中每一行所属的索引.

Factorize仅适用于单列.pandas中有多列等效函数吗?

HYR*_*YRY 13

你需要先创建一个元组的ndarray,pandas.lib.fast_zip在cython循环中可以非常快速地完成.

import pandas as pd
df = pd.DataFrame({'x': [1, 1, 2, 2, 1, 1], 'y':[1, 2, 2, 2, 2, 1]})
print pd.factorize(pd.lib.fast_zip([df.x, df.y]))[0]
Run Code Online (Sandbox Code Playgroud)

输出是:

[0 1 2 2 1 0]
Run Code Online (Sandbox Code Playgroud)

  • 我收到以下错误:{AttributeError}模块“pandas”没有属性“lib” (2认同)
  • 该函数可以在“pd._libs.lib.fast_zip”下找到。不确定什么时候改变的。 (2认同)