【问题标题】:Pandas: back unique values to column in order熊猫:按顺序将唯一值返回到列
【发布时间】:2019-11-01 04:10:48
【问题描述】:

我不确定在这种情况下我应该如何处理。

考虑像下面这样的 df,当我这样做时 df.A.unique() -> 给我一个这样的数组 [1, 2, 3, 4]

但我也想要这个值的索引,比如numpy.unique()

df = pd.DataFrame({'A': [1,1,1,2,2,2,3,3,4], 'B':[9,8,7,6,5,4,3,2,1]})
df.A.unique()
>>> array([1, 2, 3, 4])

np.unique([1,1,1,2,2,2,3,3,4], return_inverse=True)
>>> (array([1, 2, 3, 4]), array([0, 0, 0, 1, 1, 1, 2, 2, 3]))

如何在 Pandas 中做到这一点?带索引的唯一值。

【问题讨论】:

  • 你的意思在这里索引
  • @WeNYoBen 他想要第一个遇到的唯一值的索引
  • np.unique(df.A.values,return_inverse=True)?

标签: python pandas unique


【解决方案1】:

pandas 我们有drop_duplicates

df.A.drop_duplicates()
Out[22]: 
0    1
3    2
6    3
8    4
Name: A, dtype: int64

匹配np.unique 输出factorize

pd.factorize(df.A)
Out[21]: (array([0, 0, 0, 1, 1, 1, 2, 2, 3]), Int64Index([1, 2, 3, 4], dtype='int64'))

【讨论】:

  • factorize 是这个用例的一个不错的选择。你也可以直接在系列上使用它 bdw :) df.A.factorize()
【解决方案2】:

您还可以使用索引为.unique().map() 字典:

df.A.map({i:e for e,i in enumerate(df.A.unique())})

0    0
1    0
2    0
3    1
4    1
5    1
6    2
7    2
8    3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-26
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多