Pandas教程20:数据透视表pivot_table重塑股票数据,同列不同行转化成同行不同列

---------------pandas数据分析集合---------------

Python教程71:学习Pandas中一维数组Series

Python教程74:Pandas中DataFrame数据创建方法及缺失值与重复值处理

Pandas数据化分析,DataFrame行列索引数据的选取,增加,修改和删除操作

Pandas教程05:DataFrame数据常用属性和方法汇总

Pandas教程06:DataFrame.merge数据的合并处理

Pandas教程07:DataFrame数据的算术运算+逻辑运算+describe()方法+统计函数+自定义函数运算

Pandas教程08:教你DataFrame数据的条件筛选------精选篇

Pandas教程09:使用date_range函数,创建时间序列数据

Pandas教程10:DataFrame数据可视化绘制折线图、柱状图、散点图、饼形图

Pandas教程11:关于pd.DataFrame.shift(1)数据下移的示例用法

Tkinter教程22:DataFrame数据加入到treeview树视图(含横纵滚动条+正反向排序)

Pandas教程12:常用的pd.set_option方法,显示所有行和列+不换行显示等等...

Pandas教程13:groupby函数的分组、聚合、转换和过滤操作

Pandas教程14:DataFrame数据合并(concat+merge+_append+join)的4种方法

Pandas教程15:多个DataFrame数据(保存+追加)为Excel表格数据

Pandas教程16:DataFrame列标题批量重命名+空df数据判断+列名顺序重排

Pandas教程17:关于json数据转化成DataFrame数据,消除警告提示的方法。

Pandas教程18:df数据中含有的关键字批量replace替换+删除行或列

Pandas教程19:groupby分组后,对列中指定关键字的组,进行求和运算。

1.pivot_table是一种数据处理技术,用于对数据进行透视操作。它可以根据指定的行和列,对数据进行聚合、汇总和重塑,以便更好地理解和分析数据。

在Excel中,pivot_table是一种常见的功能,用于将原始数据表格转换为更易读和分析的汇总表格。在Python中,pandas库提供了pivot_table函数,用于实现相同的功能。语法如下:

python 复制代码
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True)

参数说明如下:

python 复制代码
data:要进行透视操作的数据集。
values:要聚合的数值列。
index:透视表的行索引。
columns:透视表的列索引。
aggfunc:聚合函数,默认为'mean',表示计算均值。
fill_value:用于填充缺失值的值。
margins:是否显示行和列的汇总,默认为False。
dropna:是否删除包含缺失值的行或列,默认为True。

1.假设有这样一个需求,股票中成交类型有bs和中性盘,把类型中"B"和"S"提取出来,分别转化为买入金额和卖出金额,同时确保不存在"B"或"S"时对应的买入或卖出金额显示为0,最后要使买入和卖出金额在同一行显示+并统计所有买单和卖单值。说的有些绕,大家跑一下代码就知道,是什么个效果了。

python 复制代码
# @Author : 小红牛
# 微信公众号:WdPython
import pandas as pd

# 1.设置kind类中含有bsu的虚拟股票数据
data = {
    '股代码': ['600519', '600519', '600519', '600519'],
    '时间': ['20240315', '20240315', '20240315', '20240315'],
    '金额': [866.26, 500.13,2000.18, 1233.86],
    'kind': ['B', 'S', 'B', 'U']
}

# 创建DataFrame
df = pd.DataFrame(data)
print('1.原始DataFrame数据:'.center(30, '-'))
print(df)

# 2.使用pivot_table方法来重塑数据
pivot_df = df.pivot_table(index=['股代码', '时间'], columns='kind', values='金额', aggfunc='sum').fillna(0)
# 3.重置索引,使其变为普通的列
pivot_df.reset_index(inplace=True)
print('2.重塑处理后的数据:'.center(30, '-'))
print(pivot_df)
# 4.使用字典来重命名df列标题,把bsu替换成对应的
column_mapping = {'B': '总买金额', 'S': '总卖金额', 'U': '中性盘'}
df_renamed = pivot_df.rename(columns=column_mapping)
# print(df_renamed)
# 需要的列数据
df_renamed.columns = ['股代码', '时间', '总买金额', '总卖金额', '中性盘']
# 5.显示优化后的DF数据
print('3.新数据:'.center(30, '-'))
print(df_renamed)

输出内容:实际当中会有很多个成交数据的,操作的方式是一样的,这里只用几个数据操作演示。执行代码后把600519贵州茅台所有的b,s,u相加后汇总为一条数据显示。

python 复制代码
-------1.原始DataFrame数据:-------
      股代码        时间       金额 kind
0  600519  20240315   866.26    B
1  600519  20240315   500.13    S
2  600519  20240315  2000.18    B
3  600519  20240315  1233.86    U
---------2.重塑处理后的数据:----------
kind     股代码        时间        B       S        U
0     600519  20240315  2866.44  500.13  1233.86
----------3.新数据:-----------
      股代码        时间     总买金额    总卖金额      中性盘
0  600519  20240315  2866.44  500.13  1233.86

2.另一种情况,有些股票的大单b,s,u不一定同时都有数据,如果再使用上面的方法,将无法解决问题。处理思路,我们只需要添加一个b,s,u的行数据,默认值为0,就可以万能用法了,0相加的时候是不影响最后的结果的。

python 复制代码
import pandas as pd

# 1.设置一个只有B的数据,没有s和u
data = {
    '股代码': ['600519', '600519'],
    '时间': ['20240315', '20240315'],
    '金额': [866.26, 2000.18],
    'kind': ['B', 'B']
}
# 设置列名, 列名与data数据中的列名相同
columns = ['股代码', '时间', '金额', 'kind']
# 创建一个DataFrame
df = pd.DataFrame(data, columns=columns)
# 2.增加bsu空数据,在第几行随便写数字随便,只要不覆盖原数据即可
df.loc[20] = ['600519', '20240315', 0, 'B']
df.loc[30] = ['600519', '20240315', 0, 'S']
df.loc[40] = ['600519', '20240315', 0, 'U']
print('1.原始DataFrame数据:'.center(30, '-'))
print(df)

# 3.使用pivot_table方法来重塑数据
pivot_df = df.pivot_table(index=['股代码', '时间'], columns='kind', values='金额', aggfunc='sum').fillna(0)
# print(pivot_df)
# 4.重置索引,使其变为普通的列
pivot_df.reset_index(inplace=True)
print('2.重塑处理后的数据:'.center(30, '-'))
print(pivot_df)
# 5.使用字典来重命名df列标题,把bsu替换成对应的
column_mapping = {'B': '总买金额', 'S': '总卖金额', 'U': '中性盘'}
df_renamed = pivot_df.rename(columns=column_mapping)
# print(df_renamed)
# 需要的列数据
df_renamed.columns = ['股代码', '时间', '总买金额', '总卖金额', '中性盘']
# 6.显示优化后的DF数据
print('3.新数据:'.center(30, '-'))
print(df_renamed)

输出内容:

python 复制代码
-------1.原始DataFrame数据:-------
       股代码        时间       金额 kind
0   600519  20240315   866.26    B
1   600519  20240315  2000.18    B
20  600519  20240315     0.00    B
30  600519  20240315     0.00    S
40  600519  20240315     0.00    U
---------2.重塑处理后的数据:----------
kind     股代码        时间        B    S    U
0     600519  20240315  2866.44  0.0  0.0
---------3.新数据:----------
      股代码        时间     总买金额  总卖金额  中性盘
0  600519  20240315  2866.44   0.0  0.0

完毕!!感谢您的收看

----------★★历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame

相关推荐
明灯L3 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
databook4 分钟前
不平衡样本数据的救星:数据再分配策略
python·机器学习·scikit-learn
碳基学AI9 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
niuniu_66610 分钟前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
FearlessBlot13 分钟前
Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified
python·flask
时光追逐者20 分钟前
在 Blazor 中使用 Chart.js 快速创建数据可视化图表
开发语言·javascript·信息可视化·c#·.net·blazor
独好紫罗兰22 分钟前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法
正脉科工 CAE仿真36 分钟前
基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
人工智能·python·算法
千鼎数字孪生-可视化39 分钟前
3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。
ui·3d·信息可视化·数据分析
程序员一诺1 小时前
【Django开发】前后端分离django美多商城项目第15篇:商品搜索,1. Haystack介绍和安装配置【附代码文档】
后端·python·django·框架