Как получить данные в групповом режиме, как SQL с пандами. - PullRequest
0 голосов
/ 15 октября 2018

У меня есть данные, как показано ниже.

id, name, password, note, num
 1, hoge, xxxxxxxx, aaaaa, 2     
 2, hoge, xxxxxxxx, bbbbb, 1     
 3, moge, yyyyyyyy, ccccc, 2     
 4, zape, zzzzzzzz, ddddd, 3     

Я хотел бы создавать фрамедаты, используя групповые имена и пароли.В этом случае 1, hoge и 2, hoge рассматриваются как одни и те же данные.Тогда я хотел бы получить счет 3 из столбца num.Я попробовал, как показано ниже.

df1 = pd.read_csv("sample.csv")
df2 = df1.groupby(['name','password']).count()
print(df2[df2[note] > 1])

Это выглядит так.

name, password, note, num
hoge, xxxxxxxx, 2, 2     

Как я могу получить сумму значения num?

1 Ответ

0 голосов
/ 15 октября 2018

Я полагаю, вам нужно GroupBy.size или count для исключения NaN s строк с transform для новых Series с тем жеразмер аналогичен исходному DaatFrame, поэтому возможна фильтрация с помощью sum:

s = df1.groupby(['name','password'])['note'].transform('size')

s = df1.groupby(['name','password'])['note'].transform('count')

out = df1.loc[s > 1, 'num'].sum()
print (out)
3

Если необходимо рассчитывать только дублированные строки, отфильтруйте по DataFrame.duplicated с указанными столбцами для проверки дубликатов:

out = df1.loc[df1.duplicated(['name','password'], keep=False), 'num'].sum()

print (out)
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...