Спасибо за чтение. Извинения за то, что я уверен, - это простая проблема для ответа.Как реализовать фильтр Pandas GroupBy для данных смешанного типа?
У меня есть dataframe:
df:
Entry Found
0 Dog [1,0]
1 Sheep [0,1]
2 Cow "No Match"
3 Goat "No Match"
Я хочу вернуть новый dataframe, который содержит только записи, которые содержат No Match
в Found
колонке (и сохранить их индекс порядка), а именно:
Выход:
Entry Found
0 Cow "No Match"
1 Goat "No Match"
я знаю, чтобы сделать это, я должен использовать встроенный в панд GroupBy()
и filter()
функций. По этим вопросам (Filter data with groupby in pandas) и (Pandas: DataFrame filtering using groupby and a function) Я пробовал:
>> df.groupby('Found','Entry').filter(lambda x: type(x) == str)
>> No axis named Entry for object type <class 'pandas.core.frame.DataFrame'>
и:
>> df.groupby('Found').filter(lambda x: type(x) == str)
>> TypeError: unhashable type: 'list'
Может кто-нибудь сказать мне, что я делаю неправильно?
Вы можете просто отфильтровать df перед группировкой: 'df ['Found'] == 'No Match']', если это не работает, вам нужно действительно подумать о том, почему вы хотите хранить списки в a df в первую очередь, поскольку он плохо подходит для панд – EdChum
@EdChum Я ценю ваш откровенный ответ. Я согласен, что хранение списка было нецелесообразным (это была беспорядочная работа для более ранней проблемы - другое исправление может быть в порядке). Написание вашего 'df [df ['Found'] == 'No match']' ** не ** возвратил мне пустой фреймворк. (Оказывается, это на самом деле '' No Match '', а не' 'No match" ' – Chuck
@EdChum Man, Это именно то, что мне нужно ... Если бы я написал' new_df = df [df [' Found '] == 'No Match'] 'будет возвращать совершенно новый DataFrame, с которым я мог бы работать независимо, или это будет копия, где бы я менял исходный df, также изменился бы df_new? – Chuck