Найти наибольшее строковое значение во всем фрейме данных / Pandas - PullRequest
0 голосов
/ 02 мая 2020

У меня есть датафрейм с 4 столбцами, каждый из которых содержит имена актеров. Актеры присутствуют в нескольких столбцах, и я хочу найти актера или актрису, наиболее присутствующих во всех данных. Я использовал режим, но он не работает, он дает мне самый настоящий актер в каждом столбце

enter image description here

Ответы [ 3 ]

0 голосов
/ 02 мая 2020

Используйте stack и value_counts, чтобы получить полный список актеров / актрис:

df.stack().value_counts()

Использование @ Ofi91 setup:

# Artifically creating DataFrame
actors = [
    ["Will Smith","Johnny Depp","Johnny Depp","Johnny Depp"],
    ["Will Smith","Morgan Freeman","Morgan Freeman","Morgan Freeman"],
    ["Will Smith","Mila Kunis","Mila Kunis","Mila Kunis"],
    ["Will Smith","Charlie Sheen","Charlie Sheen","Charlie Sheen"],
]
df = pd.DataFrame(actors)

df.stack().value_counts()

Вывод:

Will Smith        4
Morgan Freeman    3
Johnny Depp       3
Charlie Sheen     3
Mila Kunis        3
dtype: int64

Чтобы найти наибольшее количество появлений:

df.stack().value_counts().idxmax()

Вывод:

'Will Smith'
0 голосов
/ 02 мая 2020

Давайте рассмотрим ваш фрейм данных следующим образом

enter image description here

Сначала мы сложим все столбцы в 1 столбец. Используйте приведенный ниже код для достижения этого

df1 = pd.DataFrame(df.stack().reset_index(drop=True))

enter image description here

Теперь возьмите value_counts столбца акторов, используя код

df2 = df1['actors'].value_counts().sort_values(ascending = False)

enter image description here

Здесь вы go, результирующий фрейм данных имеет имя актера и количество вхождений в фрейм данных.

Счастливый анализ !!!

0 голосов
/ 02 мая 2020

Я настоятельно рекомендую вам использовать класс Counter в python. Таким образом, вы можете просто добавить целые строки и столбцы в объект. Код будет выглядеть так:

import pandas as pd
from collections import Counter

# Artifically creating DataFrame
actors = [
    ["Will Smith","Johnny Depp","Johnny Depp","Johnny Depp"],
    ["Will Smith","Morgan Freeman","Morgan Freeman","Morgan Freeman"],
    ["Will Smith","Mila Kunis","Mila Kunis","Mila Kunis"],
    ["Will Smith","Charlie Sheen","Charlie Sheen","Charlie Sheen"],
]
df = pd.DataFrame(actors)

# Creating counter
counter = Counter()

# inserting the whole row into the counter
for _, row in df.iterrows():
    counter.update(row)

print("counter object:")
print(counter)

# We show the two most common actors
for actor, occurences in counter.most_common(2):
    print("Actor {} occured {} times".format(actor, occurences))

Вывод будет выглядеть следующим образом:

counter object:
Counter({'Will Smith': 4, 'Morgan Freeman': 3, 'Johnny Depp': 3, 'Mila Kunis': 3, 'Charlie Sheen': 3})
Actor Will Smith occured 4 times
Actor Morgan Freeman occured 3 times

Объект counter решает вашу проблему довольно быстро, но помните, что функция counter.update-function ожидает списки. Вы не должны обновляться с чистыми строками. Если вы делаете это так, ваш счетчик считает одинарные символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...