Группировка значений на основе другого столбца и суммирование этих значений вместе - PullRequest
0 голосов
/ 14 сентября 2018

В настоящее время я работаю над фиктивным анализом фиктивных данных микротранзакций MMORPG. Это пример нескольких строк файла CSV:

PID Username    Age Gender ItemID   Item Name   Price

0   Jack78      20  Male    108    Spikelord    3.53
1   Aisovyak    40  Male    143  Blood Scimitar 1.56
2   Glue42      24  Male    92   Final Critic   4.88

Здесь все становится рискованно - я успешно использую функцию группировки, чтобы получить результат, когда покупки группируются по полу их покупателей.

test = purchase_data.groupby(['Gender', "Username"])["Price"].mean().reset_index()

возвращает результат (усечено для удобства чтения)

                    Gender        Username  Price
0                   Female     Adastirin33  $4.48
1                   Female   Aerithllora36  $4.32
2                   Female      Aethedru70  $3.54
...
29                  Female        Heudai45  $3.47
..                     ...             ...    ...
546                   Male        Yadanu52  $2.38
547                   Male      Yadaphos40  $2.68
548                   Male         Yalae81  $3.34

То, к чему я сейчас стремлюсь, - это найти среднюю сумму денег, потраченную каждым полом в целом. Как я могу себе это представить, создав метод проверки мужского пола / женский / другой тег перед именем пользователя, а затем добавляет среднее значение, потраченное этим человеком, к промежуточной сумме, которой я потом смогу манипулировать. К сожалению, я очень плохо знаком с Python - понятия не имею, с чего начать, и даже если я на правильном пути.

Добавление: «Джезраэль» неправильно понял цель этого вопроса. В то время как он предоставил мне метод для очистки моих выходных рядов, он не дал мне метод или даже намек на мою основную цель, , которая заключается в объединении денег, потраченных по полу (женщины показаны во всем, кроме моего первого фрагмента, но ниже в файле csv есть мужчины, и я не хочу засорять страницу слишком большим количеством макарон) и помещать их в одну переменную.

Приложение 2: Другое решение, предложенное Jezrael,

purchase_data.groupby(['Gender'])["Price"].sum().reset_index()

создает

                  Gender     Price
0                 Female   $361.94
1                   Male $1,967.64
2  Other / Non-Disclosed    $50.19

К сожалению, использование цифр из этой новой серии (которая даст среднюю цену за покупку, записанную в этом CSV) не совсем то, что я ищу, из-за того, что некоторые пользователи купили несколько элементов в файле , Я ищу решение, которое позволяет мне вывести из своего тестового фрейма среднюю сумму денег, потраченную на пользователя, разделенную и сгруппированную по полу.

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Как правило, сумма для пользователя, а затем среднее (среднее) для пола.

В одной строке

print(df.groupby(['Gender','Username']).sum()['Price'].reset_index()[['Gender','Price']].groupby('Gender').mean())

Или в некоторых строках

df1 = df.groupby(['Gender','Username']).sum()['Price'].reset_index()
df2 = df1[['Gender','Price']].groupby('Gender').mean()
print(df2)

Некоторые заметки, я прочитал ваш пример из буфера обмена

import pandas as pd
df = pd.read_clipboard()

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

0 голосов
/ 16 сентября 2018

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

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

df1 = df.groupby(by=['Gender', 'Username']).mean().groupby(by='Gender').mean()

df1['Gender'] = df1.index
df1.reset_index(drop=True, inplace=True)
df1[['Gender', 'Price']]
0 голосов
/ 14 сентября 2018

Для меня это звучит так, как вы думаете с точки зрения таблиц базы данных. groupby() не возвращает единицу по умолчанию - метки группы представлены не в виде столбца, а в виде индексов строк. Но вместо этого вы можете сделать это следующим образом: (обратите внимание на аргумент as_index для groupby())

mean = purchase_data.groupby(['Gender', "SN"], as_index=False).mean()
gender = mean.groupby(['Gender'], as_index=False).mean()

Тогда вы, вероятно, хотите gender[['Gender','Price']]

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