在 pandas 数据框中选择随机行

choose random rows in pandas datafram

我有一个这样的数据框;

ID          code
333_c_132   x
333_c_132   n06
333_c_132   n36
333_c_132   n60
333_c_132   n72
333_c_132   n84
333_c_132   n96
333_c_132   n108
333_c_132   n120
999_c_133   x
999_c_133   n06
999_c_133   n12
999_c_133   n24
998_c_134   x
998_c_134   n06
998_c_134   n12
998_c_134   n18
998_c_134   n36
997_c_135   x
997_c_135   n06
997_c_135   n12
997_c_135   n24
997_c_135   n36
996_c_136   x
996_c_136   n06
996_c_136   n12
996_c_136   n18
996_c_136   n24
996_c_136   n36
995_c_137   x

我必须在 code 列的两个 x 之间选择 one 随机行。 IE。 例如,可能的组合是;

333_c_132   n06
999_c_133   n12
998_c_134   n18
997_c_135   n36
996_c_136   n18

如何在 pandas 中实现此目的?

我们可以使用 cumsumgroupby 创建子项并使用 sample

s=df[df.code.ne('x')].groupby(df.code.eq('x').cumsum()).apply(lambda x : x.sample(1))
s=s.reset_index(level=0, drop=True)
s
           ID code
1   333_c_132  n06
12  999_c_133  n24
17  998_c_134  n36
20  997_c_135  n12
27  996_c_136  n24