Получить строки на основе индексов, а затем создать еще один отдельный фрейм данных - PullRequest
2 голосов
/ 27 сентября 2019

Я написал код для извлечения индекса из фрейма данных, но я не знаю, как использовать эти индексы для создания другого фрейма данных из исходного фрейма данных.

Можно ли также сократить мой текущий код?Это довольно долго.

EDITED ==

import pandas as pd

a = pd.DataFrame({"a":["I have something", "I have nothing", "she has something", "she is nice", "she is not nice","Me", "He"],
                 "b":[["man"], ["man", "eating"], ["cat"], ["man"], ["cat"], ["man"], ["cat"]]})
a = a[a.b.apply(lambda x:len(x)) == 1] # is it possible to shorten the code from here
c = a.explode("b").groupby("b")
k = ["man", "cat"]
bb = a
for x in k:
    bb = c.get_group(x).head(2).index # to here?.... this part is supposed to take the first 2 indexes of each element in k

Текущие результаты:

    a       b
4   she is not nice [cat]

Expected results:


    a       b
0   I have something    [man]
2   she has something   [cat]
3   she is nice [man]
4   she is not nice [cat]

1 Ответ

3 голосов
/ 27 сентября 2019

Сначала отфильтруйте по Series.str.len, а затем преобразуйте одну элементную строку в строку, так что возможна проверка на двойственность по Series.duplicated.Инвертировать логическую маску по ~ и отфильтровать по boolean indexing:

a = a[a.b.str.len() == 1]

b = a[~a['b'].str[0].duplicated()]
print (b)
                 a      b
3      she is nice  [man]
4  she is not nice  [cat]

РЕДАКТИРОВАТЬ: для нескольких значений используйте GroupBy.head:

b1 = a.groupby(a['b'].str[0]).head(2)
print (b1)
                   a      b
0   I have something  [man]
2  she has something  [cat]
3        she is nice  [man]
4    she is not nice  [cat]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...