【问题标题】:Subset permutation of one column based on the category of another column in pandas根据熊猫中另一列的类别对一列进行子集排列
【发布时间】:2021-07-30 04:19:57
【问题描述】:

这是一个简化的案例:

df = pd.DataFrame({'col1': [1, 1, 1, 2, 2, 2, 3, 3, 3], 'col2': ['a', 'b', 'c', 'A', 'C', 'B', 'red', 'blue', 'greed']})

我想参考 col1 对 col2 进行子集置换。例如,只置换 col2 中的“a”、“b”、“c”,因为它们属于 col1 中的类别 1。并在类别 2 中排列“A”、“C”、“B”,然后在类别 3 中排列这些颜色。输出如下所示:

col1    col2
0   1   b
1   1   c
2   1   a
3   2   A
4   2   B
5   2   C
6   3   blue
7   3   red
8   3   green

因为 col1 中有数千个类别,我在想是否有一种简单的方法,而不是一个一个循环。谢谢。

【问题讨论】:

  • 这个的最终用途是什么?你需要 col1 像原始数据一样排序吗?
  • Col2 实际上是 y 变量。我想为 col1 中的每个组构建 y 加扰模型。 col1 的顺序不必和原来的一样。
  • 因此,如果您不介意 col1 的顺序,并且只希望 col2 中值的出现顺序不同,只要它们与 col1 的相同值相关联,也许可以尝试df.sample(frac=1)
  • 随机抽样不会改变标签。例如,第 1 组 (col1) 中的第一项 0 在 col2 中的值为 b。我想要做的是将 b 更改为第 1 组中的任何值(a、b、c)。

标签: pandas subset permutation


【解决方案1】:
df['col2'] = df.groupby('col1', as_index=False).col2.transform(np.random.permutation)
df

输出

    col1    col2
0   1       c
1   1       b
2   1       a
3   2       B
4   2       A
5   2       C
6   3      red
7   3      greed
8   3      blue

【讨论】:

  • 谢谢。这就是我要找的。​​span>
猜你喜欢
  • 2021-05-25
  • 2016-03-24
  • 2015-11-06
  • 1970-01-01
  • 2019-08-11
  • 2020-05-12
  • 2020-11-26
  • 2023-04-04
  • 2023-02-05
相关资源
最近更新 更多