数组的合并和分组聚合

数据合并之 join

join:默认情况下他是行行索引相同的数据合并到一起

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.ones((2,4)),index=["a","b"],columns=list("zxcv"))
df2 = pd.DataFrame(np.zeros((3,2)),index=list("123"),columns=list("12"))

print(df1.join(df2))

print(df2.join(df1))

在这里插入图片描述

总结:数据行合并 ——join
a:x行y列
b:m行n列
a.join(b) ——>(x+m)行y列
b.join(a) ——>(m+x)行n列
当某个数值本来没有时,用NaN填充

数据合并之merge

merge:按照指定列把数据按照一定的方式合并到一起
合并方式:
1.默认的合并方式:inner 交集
2.outer:并集,NaN补全
3.left:左边为准,NaN补全
4.right:右边为准,NaN补全

DataFrameGroupBy

1.可以进行遍历
2.可以调用聚合方法

import pandas as pd
import numpy as np

file_path = "starbucks_store_worldwide.csv"

df = pd.read_csv(file_path)
# print(df.head(1))
# print(df.info())
grouped = df.groupby(by="Country")
# print(grouped)

'''
DataFrameGroupBy
1.可以进行遍历
2.可以调用聚合方法
'''

#1. 进行遍历
for i,j in grouped:
    print(i)
    print("-"*50)
    print(j)
    print("*"*50)
# 按照grouped中分组方式分组后遍历输出
# print(df[df["Country"]=="US"])

#2.调用聚合方法
country_count = grouped["Brand"].count()
# 获取分组后某一部分数据
print(country_count["US"])#美国星巴克的数量
print(country_count["CN"])#中国星巴克的数量


#---统计中国每个省份国家的数量
china_data = df[df["Country"] == "CN"]

grouped = china_data.groupby(by="State/Province").count()["Brand"]

print(grouped)

#----按照多个条件进行分组,返回的是Series
grouped = df["Brand"].groupby(by=[df["Country"],df["State/Province"]]).count()
print(grouped)
print(type(grouped))

#----按照多个条件进行分组,怎么返回DataFrame?? [["Brand"]]
grouped1 = df[["Brand"]].groupby(by=[df["Country"],df["State/Province"]]).count()
grouped2 = df.groupby(by=[df["Country"],df["State/Province"]])[["Brand"]].count()
grouped3 = df.groupby(by=[df["Country"],df["State/Province"]]).count()[["Brand"]]


例题

现在我们有一组关于全球星巴克店铺的统计数据,如果我想知道美国的星巴克数量和中国的哪个多,或者我想知道中国每个省份星巴克的数量的情况,那么应该怎么办?

使用matplotlib呈现出店铺总数排名前10的国家

在这里插入图片描述
使用matplotlib呈现出中国每个城市的店铺的数量

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd

matplotlib.rc("font", family='MicroSoft Yahei', weight='bold')

file_path = "starbucks_store_worldwide.csv"

df = pd.read_csv(file_path)
df =df[df["Country"]=="CN"]
# print(df.head(1))

#使用matplotlib呈现出中国每个城市的店铺的数量
#准备数据
data1 = df.groupby(by="City").count()["Brand"].sort_values(ascending=False)[:30]

_x = data1.index
_y = data1.values

#画图
plt.figure(figsize=(20,8),dpi=80)

plt.bar(range(len(_x)),_y,width=0.3,color="orange")

plt.xticks(range(len(_x)),_x)

plt.show()

在这里插入图片描述
现在我们有全球排名靠前的10000本书的数据
1.不同年份书的数量
2.不同年份书的评分情况

#现在我们有全球排名靠前的10000本书的数据
#1.不同年份书的数量
#2.不同年份书的评分情况
import matplotlib.pyplot as plt
import pandas as pd

file_path = "books.csv"

df = pd.read_csv(file_path)
# print(df.head(1).to_string())
#1.不同年份书的数量
data1 = df[pd.notnull(df["original_publication_year"])]

grouped = data1.groupby(by="original_publication_year").count()["title"]
#2.不同年份书的评分情况
#去除original_publication_year列中nan的行
data1 = df[pd.notnull(df["original_publication_year"])]

grouped = data1["average_rating"].groupby(by=data1["original_publication_year"]).mean()

_x = grouped.index
_y = grouped.values

#画图
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)

plt.xticks(list(range(len(_x)))[::10],_x[::10].astype(int),rotation=45)

plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值