python - Pandas:如何按数据框分组并将行转换为列并合并行
问题描述
这是我的数据结构:
date_time ticker stock_price type bid ask impVol symbol strike_price delta vega gamma theta rho diff
371 2021-02-19 14:28:45 AMZN 3328.23 put 44.5 46.85 NaN AMZN210226P03330000 3330.0 NaN NaN NaN NaN NaN 1.77
370 2021-02-19 14:28:45 AMZN 3328.23 call 43.5 45.80 NaN AMZN210226C03330000 3330.0 NaN NaN NaN NaN NaN 1.77
1066 2021-02-19 14:28:55 AMZN 3328.23 call 43.5 45.80 NaN AMZN210226C03330000 3330.0 NaN NaN NaN NaN NaN 1.77
1067 2021-02-19 14:28:55 AMZN 3328.23 put 44.5 46.85 NaN AMZN210226P03330000 3330.0 NaN NaN NaN NaN NaN 1.77
我的目标是对 date_time 进行分组,然后为看跌期权的出价和要价以及看涨的出价和要价创建一个列。
我的预期输出将是这样的:
date_time ticker stock_price put_bid put_ask call_bid call_ask impVol symbol strike_price delta vega gamma theta rho diff
371 2021-02-19 14:28:45 AMZN 3328.23 44.5 46.85 43.5 45.80 NaN AMZN210226P03330000 3330.0 NaN NaN NaN NaN NaN 1.77
1066 2021-02-19 14:28:55 AMZN 3328.23 43.5 45.80 44.5 46.85 NaN AMZN210226C03330000 3330.0 NaN NaN NaN NaN NaN 1.77
我尝试了所有我能找到的例子,包括这样的旋转:
df=pd.pivot_table(df,index=['date_time','type'],columns=df.groupby(['date_time','type']).cumcount().add(1),values=['market_price'],aggfunc='sum')
df.columns=df.columns.map('{0[0]}{0[1]}'.format)
我认为我走在正确的道路上,但我就是想不通。任何帮助将不胜感激。
解决方案
为什么要尝试使用 groupby?pandas.pivot()
为您分组。
您没有提供可重现的示例(提示:请下次再做),所以我编造了一些随机数据来解释可能的解决方案。请注意,这与您需要的不同,但它是一个起点:
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['period'] = np.repeat([1,2],2)
df['product'] = 'kiwi'
df['type'] = np.tile(['buy','sell'],2)
df['price'] = np.arange(1,5)
out = pd.pivot_table(df, index =['period','product'], columns = ['type'] , values ='price' )
您需要在左侧(索引)指定您想要的内容,在顶部(列)想要的内容以及要为此组合显示哪些值(值)。
另外,您确定日期时间会相同吗?如果在前两行中它甚至只有一秒钟的时间 - 这可能吗?如果表格的第一行和第二行的股票价格不同怎么办?我不知道你的数据,所以不知道这是否可能,但这是需要考虑的事情。
另请注意,我的示例未指定聚合函数,因此默认为均值。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.pivot_table.html
推荐阅读
- amazon-web-services - 为什么在 CloudFormation 中使用嵌套堆栈时会出现“未命名导出”错误?
- twilio - Is it possible to use a twilio number for whatsapp verification on BlueStacks?
- python - 从数据集中删除异常值
- php - 如何为 X Post 设置正确的 cURL 请求?
- node.js - 如何将 twitch 聊天机器人(node.js 和 tmi.js)公开,让其他流媒体使用它
- mongodb - 没有 unionWith 的复杂查询可用
- python - 如何将列表传递给函数,然后分别使用 Python 对项目的出现进行排序和计数?
- python - 使用 imageio.imsave 保存 NumPy 数组会扭曲图像
- docker - 为什么docker容器不能在一个网络中通过ip相互访问?
- node.js - 如何将文件夹和文件传递给基于 node.js 的 CLI?