pandas python Удалить последнюю строку группы - PullRequest
1 голос
/ 17 июня 2020

Мне нужно отбросить последнего члена каждой группы, так как это мешает дальнейшим вычислениям. Я не знаю, как лучше объяснить мою проблему, но если вам нужны дополнительные разъяснения, спросите.

Мой текущий код:

 sampleDataUser = sampleData.groupby('user').filter(lambda x: x != sampleDataUser.tail(1))

возвращает эту ошибку:

  ValueError: Can only compare identically-labeled DataFrame objects

Пример данных:

df = [{ "user" : "seth", var1 = "5"}, {"user": "seth", "var1" : "8"}, {"user" : "chris", "var1" : "2"}]

Ожидаемый результат:

df = [{ "user" : "seth", var1 = "5"}, {"user" : "chris", "var1" : "2"}]

1 Ответ

0 голосов
/ 17 июня 2020

Для удаления последней строки user при дублировании используйте Series.duplicated с цепочкой | для побитового OR для маски и фильтруйте по boolean indexing:

df = pd.DataFrame([{ "user" : "seth", "var1" : "50"},
                   { "user" : "seth", "var1" : "5"}, 
                   {"user": "seth", "var1" : "8"}, 
                   {"user" : "chris", "var1" : "2"}])
print (df)
    user var1
0   seth   50
1   seth    5
2   seth    8
3  chris    2

df = df[df['user'].duplicated(keep='last') | ~df['user'].duplicated(keep=False)]
print (df)
    user var1
0   seth   50
1   seth    5
3  chris    2

Подробнее :

print (df.assign(m1 = df['user'].duplicated(keep='last'),
                 m2 = ~df['user'].duplicated(keep=False),
                 both = df['user'].duplicated(keep='last') | 
                       ~df['user'].duplicated(keep=False)))
    user var1     m1     m2   both
0   seth   50   True  False   True
1   seth    5   True  False   True
2   seth    8  False  False  False
3  chris    2  False   True   True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...