Разделить столбец данных Pandas в соответствии со значением - PullRequest
6 голосов
/ 27 апреля 2020

Я искал и не мог найти проблему, подобную моей. Так что если есть, и я не могу найти, пожалуйста, дайте мне знать. Поэтому я могу удалить этот пост.

Я застрял с проблемой разбить pandas фрейм данных на различные фреймы данных (df) по значению.

У меня есть набор данных в текстовом файле, и я храню их как pandas dataframe, который имеет только один столбец. Внутри набора данных имеется более одного набора информации, и определенное значение определяет конец этого набора, вы можете увидеть пример ниже:

Пример ввода

In [8]: df
Out[8]: 
  var1
0    a
1    b
2    c
3    d
4    endValue
5    h
6    f
7    b
8    w
9    endValue

Итак, я хочу разделить этот df на разные фреймы данных. Я не мог найти способ сделать это, но я уверен, что должен быть легкий путь. Формат, который я отображаю в примере вывода, может быть неправильным форматом. Так что, если у вас есть идея получше, я бы с удовольствием посмотрел. Спасибо за помощь.

Пример вывода, который я хотел бы

  var1
{[0    a
1    b
2    c
3    d
4    endValue]},
{[0    h
1    f
2    b
3    w
4    endValue]}

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Вы можете проверить, где var1 равно endValue, взять cumsum и использовать результат в качестве пользовательского группировщика. Затем Groupby и создайте словарь из результата:

d = dict(tuple(df.groupby(df.var1.eq('endValue').cumsum().shift(fill_value=0.))))

Или для списка фреймов данных (эффективно проиндексированных таким же образом):

l = [v for _,v in df.groupby(df.var1.eq('endValue').cumsum().shift(fill_value=0.))]

print(l[0])

       var1
0         a
1         b
2         c
3         d
4  endValue
3 голосов
/ 27 апреля 2020

Одна идея с уникальными значениями индекса заключается в замене несоответствующих значений на NaN и их заполнении, последний объект l oop groupby для списка DataFrame s:

g = df.index.to_series().where(df['var1'].eq('endValue')).bfill()
dfs = [a for i, a in df.groupby(g, sort=False)]
print (dfs)
[       var1
0         a
1         b
2         c
3         d
4  endValue,        var1
5         h
6         f
7         b
8         w
9  endValue]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...