千家信息网

怎么用Pandas构建数据

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本文小编为大家详细介绍"怎么用Pandas构建数据",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用Pandas构建数据"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。构
千家信息网最后更新 2026年10月31日怎么用Pandas构建数据

本文小编为大家详细介绍"怎么用Pandas构建数据",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用Pandas构建数据"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

构建数据

本案例中用的数据是小编自行模拟的,主要包含两个数据:订单数据和水果信息数据,并且会将两份数据合并

import pandas as pdimport numpy as npimport randomfrom datetime import *import timeimport plotly.express as pximport plotly.graph_objects as goimport plotly as py# 绘制子图from plotly.subplots import make_subplots

1、时间字段

2、水果和用户

3、生成订单数据

order = pd.DataFrame({    "time":time_range,  # 下单时间    "fruit":fruit_list,  # 水果名称    "name":name_list,  # 顾客名    # 购买量    "kilogram":np.random.choice(list(range(50,100)), size=len(time_range),replace=True) })order

4、生成水果的信息数据

infortmation = pd.DataFrame({    "fruit":fruits,    "price":[3.8, 8.9, 12.8, 6.8, 15.8, 4.9, 5.8, 7],    "region":["华南","华北","西北","华中","西北","华南","华北","华中"]})infortmation

5、数据合并

将订单信息和水果信息直接合并成一个完整的DataFrame,这个df就是接下来处理的数据

6、生成新的字段:订单金额

到这里你可以学到:

  • 如何生成时间相关的数据

  • 如何从列表(可迭代对象)中生成随机数据

  • Pandas的DataFrame自行创建,包含生成新字段

  • Pandas数据合并

分析维度1:时间

2019-2021年每月销量走势

1、先把年份和月份提取出来:

df["year"] = df["time"].dt.yeardf["month"] = df["time"].dt.month# 同时提取年份和月份df["year_month"] = df["time"].dt.strftime('%Y%m')df

2、查看字段类型:

3、分年月统计并展示:

# 分年月统计销量df1 = df.groupby(["year_month"])["kilogram"].sum().reset_index()fig = px.bar(df1,x="year_month",y="kilogram",color="kilogram")fig.update_layout(xaxis_tickangle=45)   # 倾斜角度fig.show()

2019-2021销售额走势

df2 = df.groupby(["year_month"])["amount"].sum().reset_index()df2["amount"] = df2["amount"].apply(lambda x:round(x,2))fig = go.Figure()fig.add_trace(go.Scatter(  #    x=df2["year_month"],    y=df2["amount"],    mode='lines+markers', # mode模式选择    name='lines')) # 名字fig.update_layout(xaxis_tickangle=45)   # 倾斜角度fig.show()

年度销量、销售额和平均销售额

分析维度2:商品

水果年度销量占比

df4 = df.groupby(["year","fruit"]).agg({"kilogram":"sum","amount":"sum"}).reset_index()df4["year"] = df4["year"].astype(str)df4["amount"] = df4["amount"].apply(lambda x: round(x,2))from plotly.subplots import make_subplotsimport plotly.graph_objects as gofig = make_subplots(    rows=1,     cols=3,    subplot_titles=["2019年","2020年","2021年"],    specs=[[{"type": "domain"},   # 通过type来指定类型           {"type": "domain"},           {"type": "domain"}]])  years = df4["year"].unique().tolist()for i, year in enumerate(years):    name = df4[df4["year"] == year].fruit    value = df4[df4["year"] == year].kilogram        fig.add_traces(go.Pie(labels=name,                        values=value                       ),                 rows=1,cols=i+1                )fig.update_traces(    textposition='inside',   # 'inside','outside','auto','none'    textinfo='percent+label',    insidetextorientation='radial',   # horizontal、radial、tangential    hole=.3,    hoverinfo="label+percent+name")fig.show()

各水果年度销售金额对比

years = df4["year"].unique().tolist()for _, year in enumerate(years):        df5 = df4[df4["year"]==year]    fig = go.Figure(go.Treemap(         labels = df5["fruit"].tolist(),        parents = df5["year"].tolist(),        values = df5["amount"].tolist(),        textinfo = "label+value+percent root"    ))        fig.show()

商品月度销量变化

fig = px.bar(df5,x="year_month",y="amount",color="fruit")fig.update_layout(xaxis_tickangle=45)   # 倾斜角度fig.show()

折线图展示的变化:

分析维度3:地区

不同地区的销量

不同地区年度平均销售额

df7 = df.groupby(["year","region"])["amount"].mean().reset_index()

分析维度4:用户

用户订单量、金额对比

df8 = df.groupby(["name"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"order_number"})df8.style.background_gradient(cmap="Spectral_r")

用户水果喜好

根据每个用户对每种水果的订单量和订单金额来分析:

df9 = df.groupby(["name","fruit"]).agg({"time":"count","amount":"sum"}).reset_index().rename(columns={"time":"number"})df10 = df9.sort_values(["name","number","amount"],ascending=[True,False,False])df10.style.bar(subset=["number","amount"],color="#a97fcf")

px.bar(df10,       x="fruit",       y="amount",#            color="number",       facet_col="name"      )

用户分层—RFM模型

RFM模型是衡量客户价值和创利能力的重要工具和手段。

通过这个模型能够反映一个用户的交期交易行为、交易的总体频率和总交易金额3项指标,通过3个指标来描述该客户的价值状况;同时依据这三项指标将客户划分为8类客户价值:

  • Recency(R)是客户最近一次购买日期距离现在的天数,这个指标与分析的时间点有关,因此是变动的。理论上客户越是在近期发生购买行为,就越有可能复购

  • Frequency(F)指的是客户发生购买行为的次数–最常购买的消费者,忠诚度也就较高。增加顾客购买的次数意味着能占有更多的时长份额。

  • Monetary value(M)是客户购买花费的总金额。

下面通过Pandas的多个方法来分别求解这个3个指标,首先是F和M:每位客户的订单次数和总金额

如何求解R指标呢?

1、先求解每个订单和当前时间的差值

2、根据每个用户的这个差值R来进行升序排列,排在第一位的那条数据就是他最近购买记录:以xiaoming用户为例,最近一次是12月15号,和当前时间的差值是25天

3、根据用户去重,保留第一条数据,这样便得到每个用户的R指标:

4、数据合并得到3个指标:

当数据量足够大,用户足够多的时候,就可以只用RFM模型来将用户分成8个类型

用户复购周期分析

复购周期是用户每两次购买之间的时间间隔:以xiaoming用户为例,前2次的复购周期分别是4天和22天

下面是求解每个用户复购周期的过程:

1、每个用户的购买时间升序

2、将时间移动一个单位:

3、合并后的差值:

出现空值是每个用户的第一条记录之前是没有数据,后面直接删除了空值部分

直接取出天数的数值部分:

5、复购周期对比

px.bar(df16,       x="day",       y="name",       orientation="h",       color="day",       color_continuous_scale="spectral"   # purples      )

上图中矩形越窄表示间隔越小;每个用户整个复购周期由整个矩形长度决定。查看每个用户的整体复购周期之和与平均复购周期:

得到一个结论:Michk和Mike两个用户整体的复购周期是比较长的,长期来看是忠诚的用户;而且从平均复购周期来看,相对较低,说明在短时间内复购活跃。

从下面的小提琴中同样可以观察到,Michk和Mike的复购周期分布最为集中。

读到这里,这篇"怎么用Pandas构建数据"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

用户 数据 周期 时间 客户 水果 订单 指标 金额 分析 销量 生成 销售 信息 字段 差值 年度 模型 维度 销售额 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技 互联网科技工作委员会毛军 科技类互联网 北京互联网科技有限公司 互联网科技小贷 期待互联网科技 上海致骋互联网科技 北京禾田雨橡互联网科技 互联网科技logo设计 互联网科技大会案例 互联网科技素材视频竖屏 成都仁贤领冠互联网科技有限公司 中盈科技互联网信息有限公司 崇明区互联网教育科技诚信经营 杭州壁岐互联网科技有限公司 玉溪新华互联网科技好不好 无锡工业互联网科技有限公司 上海京穆互联网科技有限公司 张家口科技产业互联网平台 杭州科技互联网公司有哪些 百单网互联网科技有限公司怎么样 哈尔滨大商圈互联网科技有限公司 喔噻互联网科技 互联网科技小贷 顺网科技2021年互联网排名 银川新华互联网科技职业技术培训学校图片 长沙茂晟互联网科技有限公司 广州有谷有贝互联网科技有限公司 互联网科技企业商标注意事项 安徽九吞吴互联网科技有限公司
0