这是输入数据帧. Case 1:

df = pd.DataFrame({'order': {0: '1',
  1: '1',
  2: '2',
  3: '2',
  4: '3',
  5: '3'},
 'start': {0: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  1: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  2: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  3: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  4: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  5: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC')},
 'end': {0: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  1: pd.Timestamp('2023-06-01 04:00:00+0000', tz='UTC'),
  2: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  3: pd.Timestamp('2023-06-01 04:00:00+0000', tz='UTC'),
  4: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  5: pd.Timestamp('2023-06-01 04:00:00+0000', tz='UTC')},
 'quant': {0: 10, 1: 10, 2: 20, 3: 30, 4: 40, 5: 50},
 'price': {0: 44, 1: 44, 2: 5, 3: 6, 4: 8, 5: 8}})

输入df图像->input df image

我的要求是根据order对此数据帧进行加宽,因此我的预期输出为 expected df

Case 2:

`
  df = pd.DataFrame({'order': {0: '1',
  1: '1',
  2: '2',
  3: '2',
  4: '3',
  5: '3',
  6: '3',
  7: '3'},
 'start': {0: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  1: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  2: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  3: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  4: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  5: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  6: pd.Timestamp('2023-03-01 04:00:00+0000', tz='UTC'),
  7: pd.Timestamp('2023-02-01 04:00:00+0000', tz='UTC')},
 'end': {0: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  1: pd.Timestamp('2023-06-01 04:00:00+0000', tz='UTC'),
  2: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  3: pd.Timestamp('2023-06-01 04:00:00+0000', tz='UTC'),
  4: pd.Timestamp('2023-05-01 04:00:00+0000', tz='UTC'),
  5: pd.Timestamp('2023-06-01 04:00:00+0000', tz='UTC'),
  6: pd.Timestamp('2023-04-01 04:00:00+0000', tz='UTC'),
  7: pd.Timestamp('2023-03-01 04:00:00+0000', tz='UTC')},
 'quant': {0: 10, 1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6:10, 7:10},
 'price': {0: 44, 1: 44, 2: 5, 3: 6, 4: 8, 5: 8, 6:9, 7:8}})`

在本例中,订单3又多了两行.因此,订单1的数据帧数量和价格应该是NAN,订单3的额外行应该是2.

输入框-> input df image

预期输出是, expected output

有谁能帮我这个忙吗?

推荐答案

这是pivot,然后您可以重新排序级别:

out = (df.pivot(index=['start', 'end'], columns='order')
         .sort_index(axis=1, level=1, sort_remaining=False)
         .swaplevel(axis=1)
      )

输出:

order                                                   1           2           3      
                                                    quant price quant price quant price
start                     end                                                          
2023-04-01 04:00:00+00:00 2023-05-01 04:00:00+00:00    10    44    20     5    40     8
2023-05-01 04:00:00+00:00 2023-06-01 04:00:00+00:00    10    44    30     6    50     8

Python相关问答推荐

Polars LazyFrame在收集后未返回指定的模式顺序

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Pandas 滚动最接近的价值

如何避免Chained when/then分配中的Mypy不兼容类型警告?

_repr_html_实现自定义__getattr_时未显示

有没有一种方法可以从python的pussompy比较结果中提取文本?

SQLAlchemy Like ALL ORM analog

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

从列表中获取n个元素,其中list [i][0]== value''

PYTHON、VLC、RTSP.屏幕截图不起作用

GPT python SDK引入了大量开销/错误超时

Tensorflow tokenizer问题.num_words到底做了什么?

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

有了Gekko,可以创建子模型或将模型合并在一起吗?

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

极点:在固定点扩展窗口

如何在Python中画一个只能在对角线内裁剪的圆?

为什么在安装了64位Python的64位Windows 10上以32位运行?

Pandas查找给定时间戳之前的最后一个值