Как выбрать строки данных в соответствии с multi- (другим столбцом) - условие для столбчатых групп?
Скопируйте следующий файл данных в буфер обмена:
textId score textInfo
0 name1 1.0 text_stuff
1 name1 2.0 different_text_stuff
2 name1 2.0 text_stuff
3 name2 1.0 different_text_stuff
4 name2 1.3 different_text_stuff
5 name2 2.0 still_different_text
6 name2 1.0 yoko ono
7 name2 3.0 I lika da Gweneth
8 name3 1.0 Always a tradeoff
9 name3 3.0 What?!
Теперь используйте
import pandas as pd
df=pd.read_clipboard(sep='\s\s+')
чтобы загрузить его в вашу среду. Как разрезать этот блок данных таким образом, чтобы строки all были возвращены в строки textId
, если группа score
этого textId
включает в себя хотя бы один score
, который равен 1.0, 2.0 и 3,0? Здесь желаемый результат операции исключает textId
rows name1, так как в его группе score
отсутствует значение 3.0 и исключение name3, так как в его группе score
отсутствует значение 2.0:
textId score textInfo
0 name2 1.0 different_text_stuff
1 name2 1.3 different_text_stuff
2 name2 2.0 still_different_text
3 name2 1.0 yoko ono
4 name2 3.0 I lika da Gweneth
Попытки
-
df[df.textId == "textIdRowName" & df.score == 1.0 & df.score == 2.0
& & df.score == 3.0]
неверно, так как условие не действует
в группе textId
, но только отдельные строки. Если это может быть
переписанный для сопоставления с группами textId
, тогда он может быть помещен
в цикле for и подали уникальное имя textIdRowName. Такая функция
собирал имена textId
в серии (скажем,
textIdThatMatchScore123
), который затем можно было бы использовать для нарезки оригинала df
как df[df.textId.isin(textIdThatMatchScore123)]
.
- Ошибка
groupby
.
Ответы
Ответ 1
Здесь одно решение - groupby
textId, а затем сохраняйте только те группы, где уникальные значения оценки - это супермножество (>=
) [1.0, 2.0, 3.0]
.
In [58]: df.groupby('textId').filter(lambda x: set(x['score']) >= set([1.,2.,3.]))
Out[58]:
textId score textInfo
3 name2 1.0 different_text_stuff
4 name2 1.3 different_text_stuff
5 name2 2.0 still_different_text
6 name2 1.0 yoko ono
7 name2 3.0 I lika da Gweneth