Изменение структуры данных - PullRequest
1 голос
/ 21 апреля 2020

У меня есть пять фреймов данных, которые имеют одинаковые индексы и столбцы, я имею в виду, что все они имеют одинаковый размер. Этими кадрами данных являются Fixed_Cost, Variable_Cost, Semi_Variable_Cost, Marginal_Cost и Total_Cost. Я хочу изменить все кадры данных одинаково.

Это Fixed_Cost:

date                       A        B
2019-01-31 00:00:00    31,58     7,16
2019-02-28 00:00:00    17,11    12,30
2019-03-31 00:00:00    16,28     9,28
2019-04-30 00:00:00    23,63    18,31
2019-05-31 00:00:00    35,10    28,64
2019-06-30 00:00:00    34,50    20,34
2019-07-31 00:00:00    22,21    13,66
2019-08-31 00:00:00    19,91     7,15
2019-09-30 00:00:00    15,48     6,63
2019-10-31 00:00:00    18,06    10,19
2019-11-30 00:00:00    26,73    11,69
2019-12-31 00:00:00    36,69    11,15
2020-01-31 00:00:00    22,67     6,32
2020-02-29 00:00:00    24,12    10,72
2020-03-31 00:00:00    39,43    18,01

Я хочу изменить его структуру следующим образом:

Year   Month       Name    Fixed_Cost
2019       1          A    31,58
2019       2          A    17,11  
2019       3          A    16,28
2019       4          A    23,63 
2019       5          A    35,10
2019       6          A    34,50
2019       7          A      .
2019       8          A      .
2019       9          A      .
2019      10          A 
2019      11          A 
2019      12          A 
2020       1          A 
2020       2          A 
2020       3          A 
2019       1          B    
2019       2          B     
2019       3          B    
2019       4          B    
2019       5          B    
2019       6          B    
2019       7          B 
2019       8          B 
2019       9          B 
2019      10          B 
2019      11          B 
2019      12          B 
2020       1          B     6,32
2020       2          B    10,72
2020       3          B    18,01

Это Можно ли сделать это изменение?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

IIU C, если вы хотите, чтобы значения данных были заполнены, мы можем использовать assign и melt

#covert to datetime first.
#df['date'] = pd.to_datetime(df['date']) 

df2 = (df.assign(year=(df['date'].dt.year)).assign(month=(df['date'].dt.month))
       .drop('date',axis=1)
       .melt(id_vars=['year','month'],var_name='name',value_name='fixed cost'))

print(df2)

    year  month name  fixed cost
0   2019      1    A  31,58
1   2019      2    A  17,11
2   2019      3    A  16,28
3   2019      4    A  23,63
4   2019      5    A  35,10
5   2019      6    A  34,50
6   2019      7    A  22,21
7   2019      8    A  19,91
8   2019      9    A  15,48
9   2019     10    A  18,06
10  2019     11    A  26,73
11  2019     12    A  36,69
12  2020      1    A  22,67
13  2020      2    A  24,12
14  2020      3    A  39,43
15  2019      1    B   7,16
16  2019      2    B  12,30
17  2019      3    B   9,28
18  2019      4    B  18,31
19  2019      5    B  28,64
20  2019      6    B  20,34
21  2019      7    B  13,66
22  2019      8    B   7,15
23  2019      9    B   6,63
24  2019     10    B  10,19
25  2019     11    B  11,69
26  2019     12    B  11,15
27  2020      1    B   6,32
28  2020      2    B  10,72
29  2020      3    B  18,01
1 голос
/ 21 апреля 2020

Подход для этого заключается в использовании расплава.

pd.melt(df, id_vars=['date'], var_name='description')
         date description  value
0  2019-01-31           A   3158
1  2019-02-28           A    233
2  2019-03-31           A    534
3  2019-01-31           B     12
4  2019-02-28           B    435
5  2019-03-31           B  64545

Затем создайте новые столбцы для года и месяца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...