Подсчитать количество вхождений значений в столбце DataFrame - PullRequest
1 голос
/ 08 марта 2019

У меня есть следующий фрейм данных:

df = pd.DataFrame(np.array([[4, 1], [1,1], [5,1], [1,3], [7,8], [np.NaN,8]]), columns=['a', 'b'])

    a    b
0   4    1
1   1    1
2   5    1
3   1    3
4   7    8
5   Nan  8

Теперь я хотел бы сделать value_counts () для столбцов для значений от 1 до 9, что должно дать мне следующее:

    a    b
1   2    3
2   0    0
3   0    1
4   1    0
5   1    0
6   0    0
7   1    0
8   0    2
9   0    0

Это означает, что я просто считаю количество вхождений значений от 1 до 9 для каждого столбца.Как это может быть сделано?Я хотел бы получить этот формат, чтобы впоследствии я мог применить df.plot(kind='bar', stacked=True), чтобы получить гистограмму с накоплением с дискретными значениями от 1 до 9 по оси x и счетчиком a и b по оси y.

Ответы [ 2 ]

5 голосов
/ 08 марта 2019

Использование pd.value_counts:

df.apply(pd.value_counts).reindex(range(10)).fillna(0)

enter image description here

2 голосов
/ 08 марта 2019

Используйте np.bincount в каждом столбце:

df.apply(lambda x: np.bincount(x.dropna(),minlength=10))

   a  b
0  0  0
1  2  3
2  0  0
3  0  1
4  1  0
5  1  0
6  0  0
7  1  0
8  0  2
9  0  0

В качестве альтернативы, используйте понимание списка вместо apply.

pd.DataFrame([
        np.bincount(df[c].dropna(), minlength=10) for c in df
    ], index=df.columns).T

   a  b
0  0  0
1  2  3
2  0  0
3  0  1
4  1  0
5  1  0
6  0  0
7  1  0
8  0  2
9  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...