簡體   English   中英

如何添加和計算(基於其他列)具有分層索引的pandas數據框中的子列?

[英]How to add and compute (based on other columns) a sub-column in a pandas dataframe with hierarchical index?

我是熊貓新手,我正在努力掌握多指標數學......

假設我們有一個帶有2D列和2D行的pandas數據幀,如示例所示,我們如何添加一個“子列” ('ALPHA', 'gamma') ,其值等於(same d1, same d2, 'ALPHA', 'alpha') + (same d1, d2-1, 'BETA', 'alpha') ,即('A',2,'ALPHA','gamma')是10 + 2?

ridx = pd.MultiIndex.from_tuples([('A',1),('A',2),('A',3),('B',1),('B',2),('B',3),('C',1),('C',2),('C',3)], names=['d1', 'd2'])
cidx = pd.MultiIndex.from_tuples([('ALPHA','alpha'),('ALPHA','beta'),('BETA','alpha'),('BETA','beta')], names=['d3', 'd4'])
dfmix = pd.DataFrame([(0,1,2,3),(10,11,12,13),(20,21,22,23),
                      (30,31,32,33),(40,41,42,43),(50,51,52,53),
                      (60,61,62,63),(70,71,72,73),(80,81,82,83),                     
                     ], index=ridx, columns=cidx)
dfmix 

數據幀

一個班輪:

dfmix['ALPHA','gamma'] = dfmix['ALPHA','alpha']
                       + dfmix.groupby(level='d1').shift()['BETA','alpha']

pd.shift是一個很好的工具,可以根據需要對齊行。 pd.groupby用於在應用此操作之前對行進行分組。

對於

In [6]: dfmix.sort_index(axis=1)
Out[6]: 
d3    ALPHA            BETA     
d4    alpha beta gamma alpha beta
d1 d2                            
A  1      0    1   NaN     2    3
   2     10   11    12    12   13
   3     20   21    32    22   23
B  1     30   31   NaN    32   33
   2     40   41    72    42   43
   3     50   51    92    52   53
C  1     60   61   NaN    62   63
   2     70   71   132    72   73
   3     80   81   152    82   83

當然,如果數學公式沒有意義,你就有Nan值。

您可以通過dfmix.columns[0..n]訪問每個唯一列

以下內容有助於更好地理解它:

In [129]: dfmix.columns[0]
Out[129]: ('ALPHA', 'alpha')

In [134]: dfmix[dfmix.columns[0]][1]
Out[134]: 10

In [136]: dfmix.columns[2]
Out[136]: ('BETA', 'alpha')

In [137]: dfmix[dfmix.columns[2]][0]
Out[137]: 2

In [138]: dfmix[dfmix.columns[0]][1] + dfmix[dfmix.columns[2]][0]
Out[138]: 12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM