进行以下从宽到长格式的数据帧转换的好方法?

锌锌

我想要实现的是将类似于但大于“此处开始”的数据帧转换目标我相信以下代码和输出可以更好地说明这一点,但列名的第一部分(日期除外)应成为列,而新列的第二部分值应称为source。我有两种以上的类型和两种来源。

虚拟数据:

import pandas as pd
import numpy as np
import datetime as dt

n = 10
date = [dt.datetime.strftime(dt.datetime.now() + dt.timedelta(days=x), '%Y-%m-%d') for x in range(n)]
rn1 = np.random.randint(0, 50, n)
rn2 = np.random.randint(-50, 1, n)

开始:

data = {'date': date, 'type1 source1': rn1, 'type2 source1': rn1*100, 'type1 source2': rn2, 'type2 source2': rn2*100}
df = pd.DataFrame(data)

输出:

    date      type1 source1 type2 source1   type1 source2   type2 source2
0   2019-03-31  43           4300            -37            -3700
1   2019-04-01  42           4200            -34            -3400
2   2019-04-02  11           1100            -29            -2900
3   2019-04-03  38           3800            -31            -3100
4   2019-04-04  42           4200            -28            -2800
5   2019-04-05  31           3100            -50            -5000
6   2019-04-06  30           3000            -17            -1700
7   2019-04-07  19           1900            -18            -1800
8   2019-04-08   2            200            -43            -4300
9   2019-04-09  26           2600            -39            -3900

目标:

data = {'date': date*2,'type1': np.concatenate([rn1, rn2]) , 'type2': np.concatenate([rn1*100, rn2*100]), 'source': np.concatenate([np.repeat('source1', n), np.repeat('source2', n)])}
df = pd.DataFrame(data)

输出:

    date    type1   type2   source
0   2019-03-31  43  4300    source1
1   2019-04-01  42  4200    source1
2   2019-04-02  11  1100    source1
3   2019-04-03  38  3800    source1
4   2019-04-04  42  4200    source1
5   2019-04-05  31  3100    source1
6   2019-04-06  30  3000    source1
7   2019-04-07  19  1900    source1
8   2019-04-08   2   200    source1
9   2019-04-09  26  2600    source1
10  2019-03-31  -37 -3700   source2
11  2019-04-01  -34 -3400   source2
12  2019-04-02  -29 -2900   source2
13  2019-04-03  -31 -3100   source2
14  2019-04-04  -28 -2800   source2
15  2019-04-05  -50 -5000   source2
16  2019-04-06  -17 -1700   source2
17  2019-04-07  -18 -1800   source2
18  2019-04-08  -43 -4300   source2
19  2019-04-09  -39 -3900   source2
耶斯列尔

首先创建MultiIndex从所有列,而不与空间分光器栏DataFrame.set_index,然后创建MultiIndex在列的Series.str.split(空间是默认值,所以分路器是没有必要的说明),通过整形DataFrame.stack,由第二级的排序MultiIndexDataFrame.sort_indexDataFrame.reset_index和最后一个rename栏:

df = df.set_index('date')
df.columns = df.columns.str.split(expand=True)
df = (df.stack()
        .sort_index(level=1)
        .reset_index()
        .rename(columns={'level_1':'source'}))
print (df)
          date   source  type1  type2
0   2019-03-31  source1     43   4300
1   2019-04-01  source1     42   4200
2   2019-04-02  source1     11   1100
3   2019-04-03  source1     38   3800
4   2019-04-04  source1     42   4200
5   2019-04-05  source1     31   3100
6   2019-04-06  source1     30   3000
7   2019-04-07  source1     19   1900
8   2019-04-08  source1      2    200
9   2019-04-09  source1     26   2600
10  2019-03-31  source2    -37  -3700
11  2019-04-01  source2    -34  -3400
12  2019-04-02  source2    -29  -2900
13  2019-04-03  source2    -31  -3100
14  2019-04-04  source2    -28  -2800
15  2019-04-05  source2    -50  -5000
16  2019-04-06  source2    -17  -1700
17  2019-04-07  source2    -18  -1800
18  2019-04-08  source2    -43  -4300
19  2019-04-09  source2    -39  -3900

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R:覆盖从宽格式到长格式的数据帧

来自分类Dev

重塑数据帧(从宽到长)

来自分类Dev

熊猫从宽到长的数据转换

来自分类Dev

从宽到长的数据转换多列

来自分类Dev

熊猫从宽到长的数据转换

来自分类Dev

在SQL中将数据从宽格式转换为长格式

来自分类Dev

根据上述逻辑,将数据帧从宽域减少到长域的有效方法

来自分类Dev

使用 dplyr 将数据帧从宽转换为长

来自分类Dev

从宽到长转置熊猫数据帧

来自分类Dev

如何将具有不同列名的具有不同列名的数据帧从宽到长转换

来自分类Dev

从宽到长格式/结构重塑

来自分类Dev

从宽到长格式/结构重塑

来自分类Dev

在R中拆分列名称并将数据从宽格式转换为长格式

来自分类Dev

当ID变量在列标题中编码时,将数据从宽格式转换为长格式

来自分类Dev

如何在R中将数据集从宽格式转换为长格式

来自分类Dev

在r中将具有时间变量的纵向数据从宽格式转换为长格式

来自分类Dev

数据从宽格式到长格式,具有多个不同类型的重复列

来自分类Dev

使用2个变量将数据帧从宽转换为长

来自分类Dev

将数据帧从宽转换为长,但将堆叠的行作为列

来自分类Dev

使用2个变量将数据帧从宽转换为长

来自分类Dev

在tidyr中,函数“ gather”用于从宽到长映射数据帧的条件是什么?

来自分类Dev

从宽到长收集数据帧,并使用R中的tidyverse生成新列

来自分类Dev

重塑R中的数据帧:从宽到长,但“可变”列的长度不相等

来自分类Dev

如何使用Python将CSV数据从宽格式转换为长数据集

来自分类Dev

从宽到长重塑调查数据集

来自分类Dev

在R中将数据帧从“宽”格式转换为“长”格式

来自分类Dev

简单数据帧的长格式到宽格式

来自分类Dev

在折叠 R 中相同 ID 的变量值的同时,从宽数据到长数据进行整形

来自分类Dev

使用多索引列在Pandas中进行棘手的从宽到长的转换

Related 相关文章

  1. 1

    R:覆盖从宽格式到长格式的数据帧

  2. 2

    重塑数据帧(从宽到长)

  3. 3

    熊猫从宽到长的数据转换

  4. 4

    从宽到长的数据转换多列

  5. 5

    熊猫从宽到长的数据转换

  6. 6

    在SQL中将数据从宽格式转换为长格式

  7. 7

    根据上述逻辑,将数据帧从宽域减少到长域的有效方法

  8. 8

    使用 dplyr 将数据帧从宽转换为长

  9. 9

    从宽到长转置熊猫数据帧

  10. 10

    如何将具有不同列名的具有不同列名的数据帧从宽到长转换

  11. 11

    从宽到长格式/结构重塑

  12. 12

    从宽到长格式/结构重塑

  13. 13

    在R中拆分列名称并将数据从宽格式转换为长格式

  14. 14

    当ID变量在列标题中编码时,将数据从宽格式转换为长格式

  15. 15

    如何在R中将数据集从宽格式转换为长格式

  16. 16

    在r中将具有时间变量的纵向数据从宽格式转换为长格式

  17. 17

    数据从宽格式到长格式,具有多个不同类型的重复列

  18. 18

    使用2个变量将数据帧从宽转换为长

  19. 19

    将数据帧从宽转换为长,但将堆叠的行作为列

  20. 20

    使用2个变量将数据帧从宽转换为长

  21. 21

    在tidyr中,函数“ gather”用于从宽到长映射数据帧的条件是什么?

  22. 22

    从宽到长收集数据帧,并使用R中的tidyverse生成新列

  23. 23

    重塑R中的数据帧:从宽到长,但“可变”列的长度不相等

  24. 24

    如何使用Python将CSV数据从宽格式转换为长数据集

  25. 25

    从宽到长重塑调查数据集

  26. 26

    在R中将数据帧从“宽”格式转换为“长”格式

  27. 27

    简单数据帧的长格式到宽格式

  28. 28

    在折叠 R 中相同 ID 的变量值的同时,从宽数据到长数据进行整形

  29. 29

    使用多索引列在Pandas中进行棘手的从宽到长的转换

热门标签

归档