Pandasgroupby "ngroup"函数按"group"顺序标记每个组。
我正在寻找类似的行为,但需要分配的标签是在原始(索引)的顺序,我怎么能这样做有效(这将经常发生与大数组)在Pandas和numpy?
> df = pd.DataFrame(
{"A": [9,8,7,8,9]},
index=list("abcde"))
A
a 9
b 8
c 7
d 8
e 9
> df.groupby("A").ngroup()
a 2
b 1
c 0
d 1
e 2
# LOOKING FOR ###################
a 0
b 1
c 2
d 1
e 0
如何使用一维numpy数组获得所需的输出?
arr = np.array([9,8,7,8 ,9])
# looking for [0,1,2,1,0]
3条答案
按热度按时间jgwigjjp1#
也许更好的方法是
factorize
:输出:
ygya80vv2#
您可以使用
np.unique
-jk9hmnmh3#
可以将
sort=Flase
传递给groupby():据我所知,在
numpy
中没有groupby
的直接等价物。对于纯numpy
版本,您可以使用numpy.unique()
来获得唯一值。numpy.unique()
可以选择返回逆,基本上是重新创建输入数组的索引数组,但它首先对唯一值进行排序。因此结果与使用常规(排序的)pandas.groupby()
命令相同。要解决此问题,可以捕获每个唯一值第一次出现时的索引值。对索引值进行排序,并将这些值用作原始数组的索引,以按原始顺序获取唯一值。创建一个字典以在唯一值和组编号之间进行Map,然后使用该字典将数组中的值转换为相应的组编号。