Как посчитать количество всех детей под каждым идентификатором p1 в пандах?ID и родительский идентификатор даны - PullRequest
1 голос
/ 20 марта 2019

вот некоторая часть таблицы данных

df2

   id   title   parent_id
0   11  p1          11
1   12  p1          11
2   13  p2          12
3   14  p2          12
4   15  p2          13
5   16  p2          13
6   17  p3          13

Эта проблема с df2 должна выдавать как

p1_id | no. of p1|no. of p2| no. of p3 |
11    | 1        |4        | 1         |
12    | 0        |2        | 0         |

учитывая, что: 1 - Там нет определенной иерархии. Например, возможно, что у p1 есть другой p1 под ним или p3 под ним. И может быть n количество ветвей и возможный узел. 2 - р1 может иметь ребенка на n уровне уровня. как подойти к этой проблеме.

Редактировать - see this picture, чтобы визуализировать проблему

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Код

import pandas as pd
import numpy as np

data=np.array([['','id','title','parent_id'],
                [0,11,'p1',11],
                [1,12,'p1',11],
                [2,13,'p2',12],
                [3,14,'p2',12],
                [4,15,'p2',13],
                [5,16,'p3',13],
                [6,17,'p3',13]])


df=pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:])

df2=df.pivot(index='id',columns='title',values='parent_id')

df2=df.groupby(['title', 'parent_id']).count()
df2=df2.reset_index(drop=False)
df3=df2.pivot(index='parent_id',columns='title',values='id')
df3=df3.fillna(0)
print(df3)

Вход

   id title parent_id
0  11    p1        11
1  12    p1        11
2  13    p2        12
3  14    p2        12
4  15    p2        13
5  16    p3        13
6  17    p3        13

Выход

title       p1   p2   p3
parent_id               
11         2.0  0.0  0.0
12         0.0  2.0  0.0
13         0.0  1.0  2.0
1 голос
/ 20 марта 2019

Вы можете использовать функцию кросс-таблицы:

Шаг 1: создание фрейма данных

import pandas as pd
import numpy as np
d = {'id': [11, 12, 13, 14, 15, 16, 17], 'title': ['p1','p1','p2', 'p2', 'p2', 'p2', 'p3'],'parentid':['11','11','12', '12', '13', '13', '13']}
df = pd.DataFrame(data=d)

Шаг 2: Кросс-таблица

pd.crosstab(df['parentid'], df['title'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...