Подсчитать количество строк в панде - PullRequest
0 голосов
/ 17 ноября 2018

Я довольно новичок в Python.У меня есть следующий пример кадра данных df.

    Col1 Col2 Col3
0   0    1    1
1   1    1    0
2   0    1    1
3   1    0    1
4   0    0    1

Если я использую этот код df.apply(pd.Series.value_counts, axis=0) И я получаю результат как:

    Col1 Col2 Col3
0   3    2    1
1   2    3    4

Но я хочурезультат, как показано ниже (например, пивот):

    Col_Name   0    1
0   Col1       3    2
1   Col2       2    3
2   Col3       1    4

Пожалуйста, предложите.Заранее спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

Добавьте к вашему решению транспонирование по T и для нового столбца из индекса rename_axis с reset_index:

df1 = df.apply(pd.Series.value_counts, axis=0)

df1 = df1.T.rename_axis('Col_Name').reset_index()
print (df1)
  Col_Name  0  1
0     Col1  3  2
1     Col2  2  3
2     Col3  1  4

Другие решения:

Первое изменение формы столбцов на stack или melt, использование SeriesGroupBy.value_counts и последнее изменение на unstack:

df = df.stack().groupby(level=1).value_counts().unstack()
print (df)
      0  1
Col1  3  2
Col2  2  3
Col3  1  4

Для нового столбца:

df = (df.stack()
        .groupby(level=1)
        .value_counts()
        .unstack()
        .rename_axis('Col_Name')
        .reset_index())
print (df)
  Col_Name  0  1
0     Col1  3  2
1     Col2  2  3
2     Col3  1  4

Другое решение:

df = (df.melt(var_name='Col_Name')
        .groupby('Col_Name')['value']
        .value_counts()
        .unstack()
        .rename_axis(None, axis=1)
        .reset_index()
        )
print (df)
  Col_Name  0  1
0     Col1  3  2
1     Col2  2  3
2     Col3  1  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...