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

相关推荐
林浩233几秒前
Python——异常处理机制
python
数据分析螺丝钉26 分钟前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
LHNC1 小时前
2024.9.29 问卷数据分析
数据分析
小蜗笔记1 小时前
在Python中实现多目标优化问题(7)模拟退火算法的调用
开发语言·python·模拟退火算法
TANGLONG2221 小时前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
知识分享小能手1 小时前
mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
大数据·开发语言·数据库·sql·学习·mysql·数据分析
魏大橙1 小时前
Fastjson反序列化
开发语言·python
立黄昏粥可温2 小时前
Python 从入门到实战34(实例2:绘制蟒蛇)
开发语言·python
柚乐果果2 小时前
数据分析实战简例
java·大数据·python
luthane2 小时前
python 实现djb2哈希算法
python·算法·哈希算法