выбрать случайные строки в pandas datafram - PullRequest
0 голосов
/ 19 июня 2020

У меня есть такой фрейм данных;

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

Мне нужно выбрать one случайную строку между двумя x в столбце code. ie. например, возможная комбинация:

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

Как я могу добиться этого в pandas?

1 Ответ

2 голосов
/ 19 июня 2020

Мы можем использовать cumsum, создать подключ для groupby и использовать 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
...