Размер и процент элементов - PullRequest
0 голосов
/ 11 июня 2018

Я читаю CSV-файл с пандами, и после прочтения файла я хочу вычислить 2 вещи:

  1. Количество элементов
  2. % элементов

Например, если мои данные [X,X,Y,Z,Z,X,X,Y,Z,Y], я хочу, чтобы мой вывод был

X 4 40.0
Y 3 30.0
Z 3 30.0

Я попробовал следующее, но он выводит только суммы

train = pd.read_csv("./../input/train.csv")
grouped = train.groupby([x ,y]).size()

И это только вычисляет проценты:

train = pd.read_csv("./../input/train.csv")
grouped = grouped.groupby(level=[0]).apply(lambda x: x / x.sum())

Как я могу получить оба?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я бы вычислил два отдельно и объединил их:

d = {'col_one': ['X','X','Y','Z','Z','X','X','Y','Z','Y']}
df = pd.DataFrame(data=d)

nb_rows = len(df)

serie_count = df.groupby('col_one').size().rename('count')
serie_percentage = (100.*serie_count/nb_rows).rename('percentage')

final_df = pd.concat([serie_count, serie_percentage], axis=1)

Вывод:

        count   percentage
col_one
X       4       40.0
Y       3       30.0
Z       3       30.0    
0 голосов
/ 11 июня 2018

Я думаю, что нужно для процентного деления столбца на div новый столбец счета на sum:

df = pd.DataFrame({'A':list('XXYZZXXYZY')})

df = df.groupby('A').size().reset_index(name='count')
df['%'] = df['count'].div(df['count'].sum()).mul(100)
print (df)
   A  count     %
0  X      4  40.0
1  Y      3  30.0
2  Z      3  30.0

Альтернативное решение с value_counts:

df = pd.concat([df['A'].value_counts().rename('count'), 
                df['A'].value_counts(normalize=True).rename('%').mul(100)], axis=1)

df = df.rename_axis('A').reset_index()
print (df)
   A  count     %
0  X      4  40.0
1  Y      3  30.0
2  Z      3  30.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...