Вычисление общего количества уникальных значений в столбце - PullRequest
2 голосов
/ 18 июня 2020

Я пытаюсь использовать приведенные ниже данные, чтобы получить «Общее количество лайков в Facebook» для каждого уникального актера. Вывод должен быть в двух столбцах: столбец 1, содержащий уникальные имена актеров из всех столбцов «имя_актора», а столбец 2 должен содержать общее количество лайков из всех трех столбцов «актер_facebook_likes». Мы будем благодарны за любые идеи о том, как это можно сделать.

{'actor_1_name': {0: 'Ryan Gosling',
  1: 'Ginnifer Goodwin',
  2: 'Dev Patel',
  3: 'Amy Adams',
  4: 'Casey Affleck'},
 'actor_2_name': {0: 'Emma Stone',
  1: 'Jason Bateman',
  2: 'Nicole Kidman',
  3: 'Jeremy Renner',
  4: 'Michelle Williams '},
 'actor_3_name': {0: 'Amiée Conn',
  1: 'Idris Elba',
  2: 'Rooney Mara',
  3: 'Forest Whitaker',
  4: 'Kyle Chandler'},
 'actor_1_facebook_likes': {0: 14000, 1: 2800, 2: 33000, 3: 35000, 4: 518},
 'actor_2_facebook_likes': {0: 19000.0,
  1: 28000.0,
  2: 96000.0,
  3: 5300.0,
  4: 71000.0},
 'actor_3_facebook_likes': {0: nan, 1: 27000.0, 2: 9800.0, 3: nan, 4: 3300.0}}

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Используйте pivot, чтобы получить сумму лайков для каждого актера в каждой категории facebook

 df3=pd.pivot_table(df,columns=['actor_1_name', 'actor_2_name', 'actor_3_name'],values=['actor_1_facebook_likes', 'actor_2_facebook_likes',
           'actor_3_facebook_likes'],aggfunc=[np.sum]).reset_index()

Растопите актеров, сгруппируйте и просуммируйте все категории

res=pd.melt(df3,id_vars=['sum'], value_vars=['actor_1_name', 'actor_2_name', 'actor_3_name']).groupby('value').agg(Totallikes =('sum', 'sum')).reset_index()

Переименуйте столбцы

res.columns=['Actor','Totallikes']

print(res)

                 Actor  Totallikes
0           Amiée Conn     33000.0
1            Amy Adams     40300.0
2        Casey Affleck     74818.0
3            Dev Patel    138800.0
4           Emma Stone     33000.0
5      Forest Whitaker     40300.0
6     Ginnifer Goodwin     57800.0
7           Idris Elba     57800.0
8        Jason Bateman     57800.0
9        Jeremy Renner     40300.0
10       Kyle Chandler     74818.0
11  Michelle Williams      74818.0
12       Nicole Kidman    138800.0
13         Rooney Mara    138800.0
14        Ryan Gosling     33000.0
1 голос
/ 18 июня 2020

Это делает работу:

df0 = pd.DataFrame({'actor_1_name': {0: 'Ryan Gosling',
  1: 'Ginnifer Goodwin',
  2: 'Dev Patel',
  3: 'Amy Adams',
  4: 'Casey Affleck'},
 'actor_2_name': {0: 'Emma Stone',
  1: 'Jason Bateman',
  2: 'Nicole Kidman',
  3: 'Jeremy Renner',
  4: 'Michelle Williams '},
 'actor_3_name': {0: 'Amiée Conn',
  1: 'Idris Elba',
  2: 'Rooney Mara',
  3: 'Forest Whitaker',
  4: 'Kyle Chandler'},
 'actor_1_facebook_likes': {0: 14000, 1: 2800, 2: 33000, 3: 35000, 4: 518},
 'actor_2_facebook_likes': {0: 19000.0,
  1: 28000.0,
  2: 96000.0,
  3: 5300.0,
  4: 71000.0},
 'actor_3_facebook_likes': {0: 0, 1: 27000.0, 2: 9800.0, 3: 0, 4: 3300.0}})

df1 = pd.concat([df0, df0, df0])

dfa = pd.DataFrame()

for i in range(0, 3):
    names = list(df1.iloc[3*i:4+3*i, i])
    val = df1.iloc[3*i:4+3*i, 3+i]
    df = pd.DataFrame(names)
    df['value'] = val
    dfa = pd.concat([dfa, df], axis = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...