Как нам взять сумму значений в столбце после группировки по другому столбцу в панде - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь построить график для анализа, есть ли какая-либо связь между available_days свойства и числом обзоров для него. У меня есть набор данных, который имеет различные уникальные списки свойств, available_days для каждого свойства, количество отзывов для каждого свойства. Я пытаюсь построить график, сгруппировав данные по 'available_days', и мне нужно подсчитать общее количество отзывов для этих свойств. Например, если доступно 25 дней, мне нужно взять сумму количества отзывов для всех свойств с 25 доступными днями. Я не мог найти способ сделать это. Я попробовал, как показано ниже, но это не дает мне ожидаемый результат.

available_days=listings.groupby(['availability_365']).count()
available_days=listings.groupby(['availability_365'])['reviews_count'].count()
available_days=listings.groupby('availability_365').agg('sum')
available_days=listings.groupby(['availability_365']).agg({'reviews_count':np.sum})

Вот набор данных, на который я ссылаюсь: dataset

Это желаемый формат вывода: desired_output

Также, пожалуйста, предложите лучший способ решения этой проблемы для построения графика.

1 Ответ

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

Вы имеете в виду что-то подобное?

import pandas as pd

df = pd.DataFrame({
    "availability": [1, 2, 2, 3, 3, 3, 4, 4, 4, 4],
    "num_reviews": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
})

# Count number of reviews per unique value for "availibility"
df["reviews_by_availability"] = df.groupby("availability")["num_reviews"].transform("sum")
print df

# Optionally, print only one instance of each "availability"
print df.drop_duplicates(subset=["availability"])

Выход:

   availability  num_reviews  reviews_by_availability
0             1            1                        1
1             2            1                        2
2             2            1                        2
3             3            1                        3
4             3            1                        3
5             3            1                        3
6             4            1                        4
7             4            1                        4
8             4            1                        4
9             4            1                        4
   availability  num_reviews  reviews_by_availability
0             1            1                        1
1             2            1                        2
3             3            1                        3
6             4            1                        4

Также, пожалуйста, не размещайте изображения ваших данных, это не поможет.

РЕДАКТИРОВАТЬ: Вы можете построить его с помощью pandas.DataFrame.plot.scatter():

# Draw scatterplot
import matplotlib.pyplot as plt
df.drop_duplicates(subset=["availability"]).plot.scatter(x="availability", y="reviews_by_availability")
plt.show()

Результат: Plot result

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