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

相关推荐
吉均4 分钟前
如何实现局域网内无痛访问Jupyter Notebook?
ide·python·jupyter
winfredzhang4 分钟前
Python视频标签工具详解:基于wxPython和FFmpeg的实现
python·ffmpeg·音视频·视频标签
这里有鱼汤11 分钟前
你以为 Socket 只能做聊天室?揭秘 Python 网络编程的 8 种硬核用法
前端·后端·python
独行soc18 分钟前
2025年渗透测试面试题总结-某腾某讯-技术安全实习生升级(题目+回答)
java·python·安全·web安全·面试·职场和发展·红蓝攻防
白808022 分钟前
python实现代码雨
开发语言·python·pygame
jinan88626 分钟前
企业的移动终端安全怎么管理?
大数据·网络·安全·数据分析·开源软件
胖子君28 分钟前
商业智能工具综合评估报告(2025年)
数据分析
小周不摆烂29 分钟前
Python爬虫:开启数据抓取的奇幻之旅(二)
python
Start_Present1 小时前
Pytorch 第十三回:神经网络编码器——自动编解码器
pytorch·python·深度学习·神经网络
互联网杂货铺1 小时前
黑盒测试、白盒测试、集成测试和系统测试的区别与联系
自动化测试·软件测试·python·功能测试·测试工具·单元测试·集成测试