---------------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函数,用于实现相同的功能。语法如下:
pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True)
参数说明如下:
data:要进行透视操作的数据集。
values:要聚合的数值列。
index:透视表的行索引。
columns:透视表的列索引。
aggfunc:聚合函数,默认为’mean’,表示计算均值。
fill_value:用于填充缺失值的值。
margins:是否显示行和列的汇总,默认为False。
dropna:是否删除包含缺失值的行或列,默认为True。
1.假设有这样一个需求,股票中成交类型有bs和中性盘,把类型中"B"和"S"提取出来,分别转化为买入金额和卖出金额,同时确保不存在"B"或"S"时对应的买入或卖出金额显示为0,最后要使买入和卖出金额在同一行显示+并统计所有买单和卖单值。说的有些绕,大家跑一下代码就知道,是什么个效果了。
# @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相加后汇总为一条数据显示。
-------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相加的时候是不影响最后的结果的。
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)
输出内容:
-------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-Pandas教程20:数据透视表pivot_table重塑股票数据,同列不同行转化成同行不同列】相关视频教程:www.yxfzedu.com