Подсчитайте, сколько участников актеров работало с другими актерами / актерами. - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть датафрейм:

title     |      cast 
------------------------------
movie1    |  cast1,cast2,cast3
movie2    |  cast4,cast1,cast6,cast7
movie3    |  cast4,cast3,cast5

pd.DataFrame({'movie': ['movie1','movie2','movie3'], 'cast': ['cast1,cast2,cast3','cast4,cast1,cast6,cast7','cast4,cast3,cast5']})

Итак, я хочу получить результат в виде:

cast   |      count
------------------------------
cast1  |  5 
cast2  |  2
cast3  |  4
cast4  |  5
cast5  |  2
cast6  |  3
cast7  |  3

Для этого

df_cast = df.join(df.cast
              .str.strip(',')
              .str.split(',',expand=True)
              .stack()
              .reset_index(level=1,drop=True)
              .rename('cast_member')).reset_index(drop=True)

Это добавит новый столбец cast_member, в каждой ячейке которого будет только одно имя члена группы. Я пытался использовать groupby('cast_member'), но я не уверен, что делать дальше.

enter image description here

Я новичок в пандах, поэтому я был бы очень признателен за ответ, хотя он мог бы быть простым.

1 Ответ

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

Используйте GroupBy.transform для нового столбца с количеством на movie первым:

df_cast['cast_count'] = df_cast.groupby('movie')['movie'].transform('size')
print (df_cast)
    movie                     cast cast_member   cast_count
0  movie1        cast1,cast2,cast3       cast1            3
1  movie1        cast1,cast2,cast3       cast2            3
2  movie1        cast1,cast2,cast3       cast3            3
3  movie2  cast4,cast1,cast6,cast7       cast4            4
4  movie2  cast4,cast1,cast6,cast7       cast1            4
5  movie2  cast4,cast1,cast6,cast7       cast6            4
6  movie2  cast4,cast1,cast6,cast7       cast7            4
7  movie3        cast4,cast3,cast5       cast4            3
8  movie3        cast4,cast3,cast5       cast3            3
9  movie3        cast4,cast3,cast5       cast5            3

Затем объедините size с sum на cast_count и вычтите для окончательного count:

df = df_cast.groupby('cast_member')['cast_count'].agg(['size','sum'])
df1 = df['sum'].sub(df['size']).rename('count').reset_index()
print (df1)
  cast_member  count
0       cast1      5
1       cast2      2
2       cast3      4
3       cast4      5
4       cast5      2
5       cast6      3
6       cast7      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...