【问题标题】:Pandas dataframe : create new ID variable based on number of modalities of an existing one [duplicate]Pandas数据框:根据现有模式的数量创建新的ID变量[重复]
【发布时间】:2018-07-28 14:41:11
【问题描述】:

Dataframe df 包含一个 ID 变量,其中包含观察组的 ID。但是 ID 值有“洞”(可以是 1,3,4,7 而没有 0,2,5,6)。

df = pd.DataFrame({'a': [1, 2, 3, 4, 5, 6 ], 'b': [7, 8 , 9, 10, 11, 12],
                   'id': [1, 4, 4, 7, 3, 1]})

   a   b  id
0  1   7   1
1  2   8   4
2  3   9   4
3  4  10   7
4  5  11   3
5  6  12   1

我的目标是用一个新的ID变量替换现有的ID变量,从0开始到我在原始ID变量中拥有的最大ID数,例如。

df2 = pd.DataFrame({'a': [1, 2, 3, 4, 5, 6 ], 'b': [7, 8 , 9, 10, 11, 12],
                    'id': [0, 2, 2, 3, 1, 0]})

   a   b  id
0  1   7   0
1  2   8   2
2  3   9   2
3  4  10   3
4  5  11   1
5  6  12   0

你知道怎么做吗?

感谢您的宝贵时间!

【问题讨论】:

  • 你基本上是在寻找一个密集的排名,只是从 0 而不是 1 开始,例如(df["id"].rank(method='dense')-1).astype(int)。不过,我确定这是重复的,所以我现在正在寻找一个。
  • @DSM 我找到了合适的目标。

标签: python python-3.x pandas dataframe


【解决方案1】:

pd.factorize 支持这个:

df['id'] = pd.factorize(df['id'], sort=True)[0]

#    a   b  id
# 0  1   7   0
# 1  2   8   2
# 2  3   9   2
# 3  4  10   3
# 4  5  11   1
# 5  6  12   0

【讨论】:

  • 搜索 pd.factorize 似乎有数百个结果。似乎它们中没有一个足够接近以使用重复项。
  • @DSM,我看了。也许不够难,但我找不到。一个使用apply,没有一个使用sort 参数。发布答案更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2020-10-25
相关资源
最近更新 更多