在datafram中按不同的列分组后,我们应该如何计算列中的值之和

2024-05-02 21:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图绘制一个图表来分析一个属性的可用天数和它的评论数量之间是否有任何关系。我有一个数据集,其中有不同的独特的财产清单,每个财产的可用天数,每个财产的评论数。我试图通过将数据按“可用天数”分组来绘图,并且我需要计算这些属性的评论总数。例如,如果可用天数是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

另外,请建议一个更好的方法来解决这个问题,绘制图表


Tags: 数据属性count图表评论绘制daysagg
1条回答
网友
1楼 · 发布于 2024-05-02 21:41:11

你是说这样的事吗

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

相关问题 更多 >